Bạn không thể phụ thuộc vào cách ghép nối như:
SELECT @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes
...
Kế hoạch thực thi và kết quả của các truy vấn kết hợp tổng hợp phụ thuộc vào vị trí biểu hiện
Ví dụ tùy thuộc vào CTE / bảng tạm thời / kế hoạch thực hiện, bạn sẽ nhận được các kết quả khác nhau:
DECLARE @text VARCHAR(MAX) = ''
,@text2 VARCHAR(MAX) = '';
SELECT CAST(ROW_NUMBER() OVER (ORDER BY name) AS INT) AS number
INTO #numbers
FROM master..spt_values
;WITH numbers (number)
AS
(
SELECT CAST(ROW_NUMBER() OVER (ORDER BY name) AS INT) AS number
FROM master..spt_values
),a AS
(
SELECT number FROM numbers WHERE number < 10
)
SELECT @text = @text + LTRIM(STR(a.number))
FROM a
ORDER BY a.number DESC
;WITH numbers (number)
AS
(
SELECT number FROM #numbers
),
a
AS
(
SELECT number FROM numbers WHERE number < 10
)
SELECT @text2 = @text2 + LTRIM(STR(a.number))
FROM a
ORDER BY a.number DESC
SELECT @text, @text2;
Tôi đã tạo mẫu và truy vấn đầu tiên của bạn đang hoạt động SqlFiddleDemo . Nhưng giải pháp của bạn phụ thuộc nhiều vào kế hoạch thực thi.
Sử dụng XML + NHÂN VIÊN để nối thay thế.