SQL Server Management Studio를 사용하여 특정 하위 문자열이 포함 된 열 이름을 가진 모든 열을 찾을 수있는 방법이 있습니까?


11

SQL Server Management Studio 2008을 사용하고 있습니다.

수천 개의 열이있는 거대한 레거시 데이터베이스가 있습니다. 이름에 특정 하위 문자열이 포함 된 모든 열을 검색 할 수 있다면 좋을 것입니다.

누구든지 이것을하는 방법을 알고 있습니까?

감사!


1
나는 schemacrawler라는 Java 프로젝트를 사용하여 자체 배치 파일 스크립트로 이런 종류의 작업을 수행합니다.
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 화면이 없습니다.
IsaacB

좋아, 정확히 무엇을 원하십니까 :)?
Stef

sys.columns이 (가) 존재하지 않는 것 같습니다. 이것에 대해보고 있습니다.
IsaacB

당신이 그것들을 "볼"수 없다면 그것은 올바른 권한이 없기 때문입니다. 당신은 부여 할 수 있습니까?
Stef

2008 스튜디오에서 우연히 이전 SQL Server 2000 데이터베이스를 쿼리하고있었습니다. 실제로 스크립트가 많이 작동합니다.
IsaacB

2

Red-Gate의 SQL 검색 과 같은 타사 도구 를 무료로 사용할 수 있습니다.


나는 빨간 게이트에서 무언가를 설치했을 것입니다. 아마도 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.