Чи можна за допомогою студії управління SQL Server знайти всі стовпці, які мають назви стовпців, які містять певну підрядку?


11

Я використовую студію керування сервером SQL 2008.

У мене величезна спадкова база з тисячами стовпців. Було б добре, якби я міг шукати всі стовпці, імена яких містять певну підрядку.

Хтось знає, як це зробити?

Спасибі!


1
Я роблю подібні речі за допомогою власного сценарію пакетного файлу, використовуючи проект Java, який називається schemacrawler.
djangofan

Відповіді:


16

Ви можете спробувати:

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

ах, так що для цього немає гарного екрану gui.
ІсаакB

Гаразд, що саме ти хочеш :)?
Стеф

sys.column, здається, для мене не існує, я переглядаю це
IsaacB

Якщо ви не можете "бачити" їх, це тому, що у вас немає правильних дозволів. Чи можете ви ВИГРАТИ?
Стеф

я запитував стару базу даних SQL Server 2000 випадково зі студії 2008 року. Ваш сценарій працює насправді, дуже дякую.
ІсаакB

2

Ви можете скористатись безкоштовними інструментами сторонніх виробників, наприклад, SQL Search Red-Gate .


У мене щось встановлено з червоних воріт, можливо, я перевірю і побачу, чи є у мене пошук sql. Спасибі!
IsaacB

2

Ви можете використовувати перегляди INFORMATION_SCHEMA.

USE <database>

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

Один з момент - переконатися у використанні правильної бази даних.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.