이상한 행동을 설명해 주시겠습니까?SELECT 문을 사용하여 변수 할당
DECLARE @t VARCHAR(256) = ''
SELECT @t = @t + CAST(smb.symbol AS VARCHAR(256))
FROM (
SELECT 1,'7'
UNION ALL
SELECT 2,'8'
UNION all
SELECT 3,'9'
) AS smb(n, symbol)
ORDER BY n
SELECT @t
출력 : 나를 위해
789
그게 전부 확인을 클릭합니다.
DECLARE @t VARCHAR(256) = ''
SELECT @t = @t + CAST(smb.symbol AS VARCHAR(256))
FROM (
SELECT NUMS.N-1 AS N, CHAR(N-1) AS symbol
FROM (
SELECT 1 + n.n1 + nn.n2 * 10 + nnn.n3 * 100 as N
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS n(n1)
CROSS JOIN (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS nn(n2)
CROSS JOIN (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS nnn(n3)
) AS NUMS
WHERE NUMS.N BETWEEN 56 AND 58
) AS smb(N, symbol)
ORDER BY smb.N
SELECT @t
출력 :
9
그렇다면 번째 예는 마지막 심볼 출력 하는가?
당신은 문서화되지 않은 및 무보증 행동에 의존하고 있습니다. 이 연결 방법은 항상 작동하지는 않습니다. [nvarchar concatenation/index/nvarchar (max) inexplicable behavior]의 가능한 복제본 (http://stackoverflow.com/questions/15138593/nvarchar-concatenation-index-nvarcharmax-inexplicable-behavior) –
재미있는 것을보고 싶습니까? 두 번째 쿼리에서 ORDER BY를 제거하면 789가 반환됩니다. :) 실행 가능한 질문에 대해서는 +1. –
FOR XML PATH ('')를 사용하십시오 – Serge