Есть ли способ использовать студию управления SQL Server, чтобы найти все столбцы, имена столбцов которых содержат определенную подстроку?


11

Я использую SQL Server Management Studio 2008.

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

Кто-нибудь знает как это сделать?

Благодарность!


1
Я делаю подобные вещи с помощью своего собственного скрипта пакетного файла, используя для этого работу Java-проект под названием schemacrawler.
Джангофан

Ответы:


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

ах, так что для этого нет красивого графического экрана.
IsaacB

Хорошо, что вы хотите именно :)?
Stef

sys.columns, кажется, не существует для меня, я смотрю на это
IsaacB

Если вы не можете их «видеть», это потому, что у вас нет необходимых прав. Можете ли вы предоставить?
Stef

я случайно запросил старую базу данных sql server 2000 из студии 2008. Ваш сценарий работает на самом деле, большое спасибо.
IsaacB

2

Вы можете использовать некоторые сторонние инструменты, такие как SQL-поиск Red-Gate, которые являются бесплатными.


У меня установлено что-то из красных ворот, может быть, я проверю и посмотрю, есть ли у меня поиск в SQL. Благодарность!
ИсаакБ

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.