2017-01-12 4 views
0

열 집합을 캡처하려고하지만 해당 데이터에 따라 집합이 변경 될 수 있습니다 (매월 변경됨). 이 때문에 서비스 열의 고유 값을 캡처하고 쉼표로 구분 된 열 이름을 나중에 호출 할 변수에 넣는 방법을 연구 중입니다. 다음은 코드 (중요한 것만 분석)입니다.동적 SQL이 모든 열을 캡처하지 못함

DECLARE @cols AS NVARCHAR(MAX); 

SELECT @cols = ISNULL(@cols + ',','') + QUOTENAME([Service]) 
FROM(
    SELECT DISTINCT Billing_Table.[Service] 
    FROM Billing_Table 
    ) AS Services; 

문제는 내가 그 자체로

SELECT DISTINCT Billing_Table.[Service] 
FROM Billing_Table 

을 실행할 때, 나는 (좋은이다, 그것은 내가 기대하고 무엇)에 나열된 별개의 서비스를 모두 얻을 수 있다는 것입니다. 그러나 변수 @cols에 같은 열이 모두 포함되어 있지 않습니다. 좋지 않습니다.

이유가 무엇입니까? 이 문제를 해결하려면 무엇을 수정할 수 있습니까?

답변

1

@cols 변수를 재귀 적으로 사용하고 있기 때문에 코드가 작동하지 않는 이유가 있습니다. 그것은 SQL과 마찬가지로 작동하지 않습니다. (필자가 아는 한, T-SQL의 재귀는 CTE를 통해 수행되어야합니다.)

SELECT @cols = STUFF((
     SELECT DISTINCT CONCAT(',',[Service]) FROM Billing_table 
     FOR XML PATH(''),type).value('.','NVARCHAR(MAX)'),1,1,'') 

시험을 시도해보십시오

DECLARE @tmp TABLE (
    ID INT 
); 

DECLARE @cols NVARCHAR(MAX); 

INSERT INTO @tmp (ID) 
VALUES 
(1), (2), (3); 

SELECT @cols = STUFF((
    SELECT DISTINCT CONCAT(',',ID) FROM @tmp 
    FOR XML PATH(''),type).value('.','NVARCHAR(MAX)'),1,1,'') 

SELECT @cols; 
+0

다시 시도 @PartyHatPanda. 거기에 여분의 테이블 이름이 있습니다. – DVT

+1

편집 내용을보고 코드에서 제대로 작동합니다 (제대로 작동하고 유사한 데이터로 다른 경우로 변경하기 위해 조금만 조정하면됩니다) – PartyHatPanda

관련 문제