2012-12-03 5 views
2

SQL Server에 100 개의 테이블이있는 데이터베이스가 있습니다.데이터베이스의 레코드에서 특수 문자를 검색합니다.

모든 100 개의 테이블에있는 모든 열의 모든 행을 구문 분석하고 특수 문자가 %,# 인 행을 반환하는 쿼리를 작성해야합니다.

모든 테이블의 모든 행을 구문 분석하는 쿼리는 어떻게 작성합니까?

+0

같은 구조의 모든 100 개의 테이블? – AnandPhadke

+0

@AnandPhadke : 아니요 다른 구조 – Rockstart

+1

http://stackoverflow.com/questions/12824577/how-to-search-all-text-fields-in-a-db-for-some-substring-with에서보세요. -t-sql. % 문자를 이스케이프하고 싶을 수도 있습니다. 예. where '% \ %%'와 (과) 같은 col을 이스케이프 '\' –

답변

1

어쩌면 그렇게 미묘한 솔루션,하지만 작동 :

USE TSQL2012 
GO 

DECLARE @ColumnName VARCHAR (50) 
DECLARE @TableName VARCHAR (50) 
DECLARE @SchemaName VARCHAR (50) 
DECLARE @SQLQuery NVARCHAR (200) 

DECLARE findSpecialCharacters CURSOR 
FOR 
    SELECT c.name, o.name, s.name from sys.columns c 
     INNER JOIN sys.objects o ON c.object_id = o.object_id 
     INNER JOIN sys.schemas s ON o.schema_id = s.schema_id 
    WHERE o.type = 'U' 
OPEN findSpecialCharacters 
FETCH NEXT FROM findSpecialCharacters 
INTO @ColumnName, @TableName, @SchemaName 
WHILE @@FETCH_STATUS = 0  
BEGIN 
    SET @SQLQuery = 
     'SELECT ' + @ColumnName + ', * FROM ' + 
      @SchemaName + '.' + @TableName + 
     ' WHERE (' + @ColumnName + ' LIKE ' + 
      CHAR(39) + CHAR(37) + '[,]' + CHAR(37) + CHAR(39) + ') OR (' + 
     @ColumnName + ' LIKE ' + 
      CHAR(39) + CHAR(37) + '[#]' + CHAR(37) + CHAR(39) + ') OR (' + 
     @ColumnName + ' LIKE ' + 
      CHAR(39) + CHAR(37) + '[%]' + CHAR(37) + CHAR(39) + ')' 

    PRINT 'Table: ' + @TableName + '; Column: ' + @ColumnName 
    PRINT @SQLQuery 
    EXEC sp_executesql @SQLQuery 



    FETCH NEXT FROM findSpecialCharacters 
    INTO @ColumnName, @TableName, @SchemaName 
END 
CLOSE findSpecialCharacters 
DEALLOCATE findSpecialCharacters 

첫째, 나는 모든 테이블의 모든 열을 검색하고, 그 결과 집합 FOR SELECT 커서 문에 넣어. 표에 5 개의 열이 있으면 커서는 WHERE 필터 인 열에 따라 5 개의 다른 결과 집합을 만듭니다.

그러나 어떤 열을 검색하고 있는지 구분하기 위해이 열을 선택 목록의 첫 번째 열로두면됩니다.

관련 문제