Czy istnieje sposób, aby za pomocą programu SQL Server Management Studio znaleźć wszystkie kolumny o nazwach kolumn zawierających określone podciągi?

11

Używam SQL Server Management Studio 2008.

Mam ogromną starą bazę danych z tysiącami kolumn. Byłoby miło, gdybym mógł wyszukać wszystkie kolumny, których nazwy zawierają określony podciąg.

Czy ktoś wie jak to zrobić?

Dzięki!

Izaak B.
źródło
1
Robię to za pomocą własnego skryptu pliku wsadowego, korzystając z projektu Java o nazwie schemacrawler.
djangofan

Odpowiedzi:

16

Mhm, możesz spróbować:

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
źródło
ah, więc nie ma na to ładnego ekranu GUI.
IsaacB
Ok, czego dokładnie chcesz :)?
Stef
Wydaje mi się, że sys.columns nie istnieje, patrzę na to
IsaacB
Jeśli nie możesz ich „zobaczyć”, oznacza to, że nie masz odpowiednich uprawnień. Czy możesz UDZIELIĆ?
Stef
przez przypadek przeszukiwałem starą bazę danych serwera SQL 2000 Server ze studia 2008. Twój skrypt działa właściwie, wielkie dzięki.
IsaacB,
2

Możesz użyć narzędzi innych firm, takich jak SQL-Search firmy Red-Gate, które są bezpłatne.

jgardner04
źródło
mam coś z czerwonej bramy, może sprawdzę i zobaczę, czy mam wyszukiwanie SQL. Dzięki!
IsaacB,
2

Możesz użyć widoków INFORMACJE_SCHEMA.

USE <database>

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

Jednym z haczyków jest użycie odpowiedniej bazy danych.

CTKeane
źródło
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
źródło