2011-08-19 3 views
1

특정 값을 쿼리하려면 데이터베이스의 특정 테이블의 특정 열에서 "AYX"라고 말하면됩니다. 테이블 및 열의 목록을 기본적으로 " AYX ".. 어떻게해야합니까? 가능합니까? SQL Server 2008을 사용 중입니다특정 열 값 검색

+0

더 구체적 수 있습니까? 열 값이 "AYX"인 행을 하나 이상 포함하는 테이블/열을 반환 하시겠습니까? 또는 실제 데이터를 반환 하시겠습니까? 열 이름이 무엇인지, 아니면 문자열이 포함 된 열만 중요합니까? –

+0

@Aaron 맞습니다. 적어도 하나의 행이 포함 된 테이블/열을 반환하고 싶습니다. 열 값이 "AYX"인 곳 – satyajit

+0

내 모든 질문을 보지 못했습니다. 무슨 칼럼? 모든 문자열 열? 특정 열 이름? –

답변

3
DECLARE @string NVARCHAR(32) = N'AYX'; 


CREATE TABLE #results 
(
    [column] NVARCHAR(768), 
    [value] NVARCHAR(MAX) 
); 

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += 'SELECT ''' 
    + QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) 
    + '.' + QUOTENAME(OBJECT_NAME([object_id])) 
    + '.' + QUOTENAME(name) + ''', ' + QUOTENAME(name) + ' FROM ' 
    + QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) 
    + '.' + QUOTENAME(OBJECT_NAME([object_id])) 
    + ' WHERE ' + QUOTENAME(name) + ' LIKE ''%' + @string + '%''; 
    ' 
FROM sys.columns 
WHERE system_type_id IN (35, 99, 167, 175, 231, 239) 
AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0; 

INSERT #results EXEC sp_executesql @sql; 

SELECT [column],[value] FROM #results; 

DROP TABLE #results; 
+0

+1 - 이것은 매우 철저한 대답입니다. 할 수만 있다면 더 많은 것을 upvote 할 것입니다. 나는이 링크를 먼저 방문하도록 op를 추천 할 것이다. http://www.sommarskog.se/dynamic_sql.html – Lamak

+0

나는 이것이 내부 프로세스에 있다고 가정하고 일반 사용자에게 노출되지 않으므로 SQL 주입 등에 대한 일반적 경고가 일시 중단 될 수 있습니다. –

0

동적/코드 생성 쿼리를 사용해야합니다.

SELECT * FROM INFORMATION_SCHEMA.COLUMNS에서 데이터베이스의 열 목록을 확인하십시오.

해당 테이블/뷰에 WHERE 절이있는 적절한 데이터 유형으로 제한하십시오.

코드 검색을 수행 할 쿼리를 생성 : SELECT '{TABLE_NAME}' AS TABLE_NAME, '{COLUMN_NAME}' AS COLUMN_NAME, COUNT(*) AS ROW_COUNT FROM {TABLE_NAME} WHERE {COLUMN_NAME} LIKE '%{SEARCH}%'

UNION ALL가 함께 쿼리 결과

1

@Aaron 버트 랜드는 아주 좋은 스크립트를했다 (외부 쿼리에 WHERE ROW_COUNT <> 0 추가).

무료 도구가 있다는 것을 지적하고 싶습니다. SSMS Tools Pack은 모든 테이블/뷰에서 데이터를 검색 할 수 있습니다.

SSMS Tools Pack