2012-01-13 4 views
2

SQL 서버 2008선택 열 이름

나는 열이있는 테이블 MyTableA, B, C, D

내가 원하는 행 null이 아닌들만 열 목록을 선택/공백. 결과 집합은

A 
C 
D 

B이 내 행에 null 인 경우입니다.

실제로 실제로는 E 열이있을 수 있습니다. 그러나 나는 다른 식탁에서 가능한 모든 열 이름을 얻고 MyTabie 그들 중 하나를 가지고 있으며, 그래서 어떤 사람이 행에 데이터가있는 경우 내가

따라서 선택한 경우 확인해야 할 수 있습니다 각각에 대해

select * from MyTable where ID = 6 

select ColumnName from AllColumnNames 
  • MyTableColumnName가 존재하고 where ID = 6의 데이터가 있다면, 결과의 ColumnName
    • , 출력 ColumnName 추가.

있어 꼭 한 쿼리에서이 작업을 수행 할 수있는 방법이?

+2

나는 이것을 쉽게 수행 할 수있는 유일한 방법은 동적 SQL –

답변

3

이것은 CTE에서 테이블을 XML로 변환 한 다음 XQuery를 사용하여 빈 값이없는 노드 이름을 찾습니다. 열 이름이 XML 노드 이름에 대한 규칙을 위반하지 않으면이 작업이 작동합니다.

;with C(TableXML) as 
(
    select * 
    from MyTable 
    where ID = 6 
    for xml path('T'), elements xsinil, type 
) 
select T.X.value('local-name(.)', 'sysname') as ColumnName 
from C 
    cross apply C.TableXML.nodes('/T/*') as T(X) 
where T.X.value('.', 'nvarchar(max)') <> '' 

여기보십시오 :

http://data.stackexchange.com/stackoverflow/query/59187 추가이 당신이뿐만 아니라 ID 열을 제외 할 절을 경우하여.

T.X.value('local-name(.)', 'sysname') <> 'ID'