2016-12-15 5 views
0

아래 구문을 이해하려고합니다. 이 문제에 대해 도움을받을 수 있습니까? 첫 번째 매개 변수는 다음 두 번째 매개 변수가 반환됩니다 NULL 경우COALESCE에 대한 구문 이해

DECLARE @StringList VARCHAR(2500); 
SELECT COALESCE(@StringList + ',','') + CAST(apID as VARCHAR) AS ApIdList FROM testTable 

답변

1

결과는 VARCHAR

COALESCE 검사에 testTable의 모든 apID을 얻을 것이다. 이 라인에서 @StringList는 항상 그래서 NULL

COALESCE(@StringList + ',','') 

동일, NULL + ',' = NULL 당신은 ('')

그런 empty string + CAST(apID as VARCHAR) 빈 문자열을 얻을 것이다

1

합체가 처음 비를 반환 apIDVARCHAR 당신이 얻을 것이다 제공된리스트에 제공된 null 요소. -https://msdn.microsoft.com/en-us/library/ms190349.aspx을 참조하십시오.

@StringList가 null이 아닌 경우 내용에 testTable의 각 행에 대한 쉼표가 appID 앞에 붙습니다.

1

코드는 ApID을 테이블의 모든 행에 대한 문자열로 반환합니다. 왜? @StringListNULL이므로 첫 번째 표현식은 ''이고 두 번째 표현식은 표의 일부 행에있는 ApId의 문자열 표현으로 계산됩니다.

길이가없는 VARCHAR으로 변환하는 것에 대해주의해야합니다. 이러지 마! 기본 길이는 컨텍스트에 따라 다르며 길이가 없으면 디버깅하기가 매우 어려운 오류를 도입 할 수 있습니다.

이와 관련된 표현이 일반적이다, 생각 :

SELECT @StringList = COALESCE(@StringList + ',', '') + CAST(apID as VARCHAR(8000)) AS ApIdList 
FROM testTable; 

이 너무 apID의 모든 값은 쉼표로 구분 된 문자열에 함께 연결된다 문자열 연결을 수행합니다.

이 작업은 변수를 할당하기 위해 결과 집합을 루핑하는 것입니다. 이러한 유형의 변수를 여러 행에 할당하는 것은 권장되지 않습니다. SQL Server가 실제로 작동한다는 것을 보장하지는 않지만 모든 버전에서 실제로 작동하는 것으로 보입니다.