2
SQL Server에 100 개의 테이블이있는 데이터베이스가 있습니다.데이터베이스의 레코드에서 특수 문자를 검색합니다.
모든 100 개의 테이블에있는 모든 열의 모든 행을 구문 분석하고 특수 문자가 %,#
인 행을 반환하는 쿼리를 작성해야합니다.
모든 테이블의 모든 행을 구문 분석하는 쿼리는 어떻게 작성합니까?
SQL Server에 100 개의 테이블이있는 데이터베이스가 있습니다.데이터베이스의 레코드에서 특수 문자를 검색합니다.
모든 100 개의 테이블에있는 모든 열의 모든 행을 구문 분석하고 특수 문자가 %,#
인 행을 반환하는 쿼리를 작성해야합니다.
모든 테이블의 모든 행을 구문 분석하는 쿼리는 어떻게 작성합니까?
어쩌면 그렇게 미묘한 솔루션,하지만 작동 :
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 개의 다른 결과 집합을 만듭니다.
그러나 어떤 열을 검색하고 있는지 구분하기 위해이 열을 선택 목록의 첫 번째 열로두면됩니다.
같은 구조의 모든 100 개의 테이블? – AnandPhadke
@AnandPhadke : 아니요 다른 구조 – Rockstart
http://stackoverflow.com/questions/12824577/how-to-search-all-text-fields-in-a-db-for-some-substring-with에서보세요. -t-sql. % 문자를 이스케이프하고 싶을 수도 있습니다. 예. where '% \ %%'와 (과) 같은 col을 이스케이프 '\' –