Gibt es eine Möglichkeit, mit SQL Server Management Studio alle Spalten mit Spaltennamen zu finden, die einen bestimmten Teilstring enthalten?

11

Ich verwende SQL Server Management Studio 2008.

Ich habe eine riesige Legacy-Datenbank mit Tausenden von Spalten. Es wäre schön, wenn ich nach allen Spalten suchen könnte, deren Namen einen bestimmten Teilstring enthalten.

Weiß jemand, wie man das macht?

Vielen Dank!

IsaacB
quelle
1
Ich mache so etwas mit meinem eigenen Batch-Dateiskript und verwende ein Java-Projekt namens schemacrawler, um die Arbeit zu erledigen.
Djangofan

Antworten:

16

Mmhh du könntest versuchen:

use <your_database>
select o.name,c.name 
from sys.columns c inner join sys.objects  o on c.object_id=o.object_id 
and o.type = 'U'
and CHARINDEX('<your_sub_string>', c.name)>=1
Stef
quelle
Ah, dafür gibt es keinen schönen GUI-Bildschirm.
IsaacB
Ok, was willst du genau :)?
Stef
sys.columns scheint für mich nicht zu existieren, ich
prüfe
Wenn Sie sie nicht "sehen" können, liegt dies daran, dass Sie nicht über die richtigen Berechtigungen verfügen. Kannst du gewähren?
Stef
Ich habe versehentlich eine alte SQL Server 2000-Datenbank aus dem Studio 2008 abgefragt. Ihr Skript funktioniert tatsächlich, vielen Dank.
IsaacB
2

Sie können einige kostenlose Tools von Drittanbietern wie die SQL-Suche von Red-Gate verwenden .

jgardner04
quelle
Ich habe etwas von Red Gate installiert, vielleicht werde ich überprüfen, ob ich SQL-Suche habe. Vielen Dank!
IsaacB
2

Sie können die Ansichten INFORMATION_SCHEMA verwenden.

USE <database>

SELECT COLUMN_NAME
     , TABLE_NAME     
 FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<string you are looking for>%'

Ein Haken ist, sicherzustellen, dass die richtige Datenbank verwendet wird.

CTKeane
quelle
0
USE <database>;

Declare @Col varchar(10);
Declare @Val varchar(10);
Declare @tablename varchar(20);
Declare @sql nvarchar(200);
Declare @sql1 nvarchar(200);

SET @Col = '...';   --INSERT COLUMN NAME
SET @Val = ...; -- INSERT COLUMN VALUE

IF OBJECT_ID('tempdb.dbo.##TempTable1', 'U') IS NOT NULL
DROP TABLE ##TempTable1;

SELECT NULL AS MYKEY, name
into ##TempTable1
FROM sysobjects
WHERE id IN ( SELECT id FROM syscolumns WHERE name = @Col )
ORDER BY name asc

set rowcount 1

update ##TempTable1 set mykey = 1

while @@rowcount > 0
begin
    set rowcount 0

    set @tablename =  (select name from ##TempTable1 where mykey = 1)
    set @sql = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+';'
    set @sql1 = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') select name from ##TempTable1 where mykey = 1'
    EXEC sp_executesql @sql1
    EXEC sp_executesql @sql

    delete ##TempTable1 where mykey = 1
        set rowcount 1
    update ##TempTable1 set mykey = 1
end
set rowcount 0
GeorgeB
quelle