Existe uma maneira de usar o SQL Server Management Studio para encontrar todas as colunas que possuem nomes de colunas que contêm uma certa substring?

11

Estou usando o SQL Server Management Studio 2008.

Eu tenho um enorme banco de dados legado com milhares de colunas. Seria bom se eu pudesse procurar todas as colunas cujos nomes contêm uma certa substring.

Alguém sabe como fazer isso?

Obrigado!

IsaacB
fonte
1
Eu faço esse tipo de coisa com meu próprio script de arquivo em lotes, usando um projeto Java chamado schemacrawler para fazer o trabalho.
precisa saber é o seguinte

Respostas:

16

Mmhh você pode tentar:

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
fonte
ah, então não há uma boa tela de interface gráfica para isso.
IsaacB
Ok, o que você quer exatamente :)?
Stef
não sys.columns não parecem existir para mim, eu estou olhando para ele
IsaacB
Se você não pode "vê-los", é porque você não tem as permissões corretas. Você pode conceder?
Stef
Eu estava consultando um banco de dados sql server 2000 antigo por acidente no estúdio de 2008. Seu script funciona realmente, muito obrigado.
IsaacB
2

Você pode usar algumas ferramentas de terceiros, como a Pesquisa SQL do Red-Gate, que são gratuitas.

jgardner04
fonte
Eu tenho algo do red gate instalado, talvez eu verifique e veja se eu tenho a pesquisa sql. Obrigado!
IsaacB
2

Você pode usar as visualizações INFORMATION_SCHEMA.

USE <database>

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

Um problema é garantir o uso do banco de dados correto.

CTKeane
fonte
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
fonte