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.