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!


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

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.