Esiste un modo in cui posso usare SQL Server Management Studio per trovare tutte le colonne che hanno nomi di colonna che contengono una determinata sottostringa?


11

Sto usando SQL Server Management Studio 2008.

Ho un enorme database legacy con migliaia di colonne. Sarebbe bello se potessi cercare tutte le colonne i cui nomi contengono una determinata sottostringa.

Qualcuno sa come fare questo?

Grazie!


1
Faccio questo genere di cose con il mio script di file batch, usando un progetto Java chiamato schemacrawler per fare il lavoro.
Djangofan,

Risposte:


16

Mmhh potresti provare:

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

ah, quindi non c'è una bella schermata GUI per questo.
IsaacB

Ok, cosa vuoi esattamente :)?
Stef

sys.columns non sembra esistere per me, ci sto esaminando
IsaacB

Se non riesci a "vederli" è perché non hai le autorizzazioni giuste. Puoi concedere?
Stef

stavo interrogando un vecchio database SQL Server 2000 per caso dallo studio del 2008. La tua sceneggiatura funziona davvero, grazie mille.
IsaacB

2

È possibile utilizzare alcuni strumenti di terze parti come Ricerca SQL di Red-Gate gratuiti.


ho qualcosa da Red Gate installato, forse controllerò e vedrò se ho ricerca sql. Grazie!
IsaacB,

2

Puoi utilizzare le viste INFORMATION_SCHEMA.

USE <database>

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

Un trucco è assicurarsi di USARE il database corretto.


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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.