[SQL] 지정된 값이 열 이름을 선택
SQL지정된 값이 열 이름을 선택
우리는 대량로드 SSIS를 통해 SQL Server 테이블로 나중에 내부 구조로 가져올 수있는하는 우리의 형식을 통제 할 수없는 오히려 큰 파일을, 받고 있습니다. 이 파일은 이상 800 열을 포함 할 수 있으며, 종종 열 이름은 즉시 인식 할 수 없습니다.
그 결과, 우리는 800 VARCHAR 컬럼에 파일의 내용을 나타내는 큰 테이블이있다.
문제는 : 나는이 데이터를 찾고 있어요 어떤 특정 값을 알고 있지만, 나는 열을 포함 모르겠어요. 그리고 말했다 열을 찾기 위해 데이터를 째려 보는 것은도 효율적으로도 이상적이다.
내 질문은 : 어떤 값 N하여 테이블을 검색하고 그 값을 가지고있는 열 이름을 반환하는 모든 가능한 그것을인가? 내가 시도한 몇 가지 코드를 게시 싶지만,이 하나 어디서부터 시작 난 정말 모르겠어요 ... 또는 심지어 가능합니다.
예를 들면 :
A B C D E F G H I J K L M N ...
------------------------------------------------------------
'a' 'a' 'a' 'a' 'a' 'b' 'a' 'a' 'a' 'b' 'b' 'a' 'a' 'c' ...
내가 값 'B'에 대한이 테이블을 검색한다면, 나는 다음과 같은 결과를 돌아 가야 할 것입니다 :
Columns
---------
F
J
K
할 수이 같은가요?
해결법
-
==============================
1.이 스크립트는 특정 문자열에 대한 모든 테이블과 모든 문자열 열을 검색합니다. 당신은 당신의 필요를 위해이 적응할 수 있습니다
이 스크립트는 특정 문자열에 대한 모든 테이블과 모든 문자열 열을 검색합니다. 당신은 당신의 필요를 위해이 적응할 수 있습니다
DECLARE @tableName sysname DECLARE @columnName sysname DECLARE @value varchar(100) DECLARE @sql varchar(2000) DECLARE @sqlPreamble varchar(100) SET @value = 'EDUQ4' -- *** Set this to the value you're searching for *** -- SET @sqlPreamble = 'IF EXISTS (SELECT 1 FROM ' DECLARE theTableCursor CURSOR FAST_FORWARD FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME NOT LIKE '%temp%' AND TABLE_NAME != 'dtproperties' AND TABLE_NAME != 'sysdiagrams' ORDER BY TABLE_NAME OPEN theTableCursor FETCH NEXT FROM theTableCursor INTO @tableName WHILE @@FETCH_STATUS = 0 -- spin through Table entries BEGIN DECLARE theColumnCursor CURSOR FAST_FORWARD FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND (DATA_TYPE = 'nvarchar' OR DATA_TYPE = 'varchar') ORDER BY ORDINAL_POSITION OPEN theColumnCursor FETCH NEXT FROM theColumnCursor INTO @columnName WHILE @@FETCH_STATUS = 0 -- spin through Column entries BEGIN SET @sql = @tableName + ' WHERE ' + @columnName + ' LIKE ''' + @value + ''') PRINT ''Value found in Table: ' + @tableName + ', Column: ' + @columnName + '''' EXEC (@sqlPreamble + @sql) FETCH NEXT FROM theColumnCursor INTO @columnName END CLOSE theColumnCursor DEALLOCATE theColumnCursor FETCH NEXT FROM theTableCursor INTO @tableName END CLOSE theTableCursor DEALLOCATE theTableCursor
-
==============================
2.당신은 하나의 옵션은 SQL Server에서 약간의 창조적 사용하여 XML이 될 것입니다.
당신은 하나의 옵션은 SQL Server에서 약간의 창조적 사용하여 XML이 될 것입니다.
두 번째 크로스 적용을의 특정 값을 갖는 노드 신청 및 쿼리 크로스 사용하여 XML로 한 번에 행을 돌립니다.
마지막으로 출력 노드 이름의 고유 한 목록입니다.
declare @Value nvarchar(max) set @Value= 'b' select distinct T3.X.value('local-name(.)', 'nvarchar(128)') as ColName from YourTable as T1 cross apply (select T1.* for xml path(''), type) as T2(X) cross apply T2.X.nodes('*[text() = sql:variable("@Value")]') as T3(X)
SQL 바이올린
-
==============================
3.당신이 파일에 액세스 할 수있는 경우 정규식이해야 빨리 SQL에서 일반 검색을 수행하는 것보다 될 것입니다.
당신이 파일에 액세스 할 수있는 경우 정규식이해야 빨리 SQL에서 일반 검색을 수행하는 것보다 될 것입니다.
당신이 사용하는 SQL을 강요하는 경우 @ pmbAustin의 대답은 길을 가야하는 것입니다. 주의 할, 신속하게 실행되지 않습니다.
from https://stackoverflow.com/questions/23481973/selecting-column-names-that-have-specified-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] Where 절에 따라 SQL Server 쿼리 시간 초과 (0) | 2020.05.30 |
---|---|
[SQL] 합니까 오라클은 숫자 데이터 유형에 대한 후행 제로를 저장? (0) | 2020.05.30 |
[SQL] 어떻게 올바르게 삽입 줄 바꿈에 NVARCHAR (0) | 2020.05.29 |
[SQL] 열 이름을 가진 여러 열의 가장 큰 가치인가? (0) | 2020.05.29 |
[SQL] 로그온을 생성 - SQL 사용자 이름으로 @parameter 사용할 수 없습니다 (0) | 2020.05.29 |