Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hành vi TSQL kỳ lạ với COALESCE khi sử dụng Đặt hàng theo

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:

SqlFiddleDemo

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ế.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Sử dụng các trường được tính toán từ SELECT trong mệnh đề WHERE

  2. SQLCLR và DateTime2

  3. Đặt hàng theo và các loại khác nhau trong một TRƯỜNG HỢP

  4. So sánh các kiểu dữ liệu ngày và giờ trong SQL Server

  5. SQL Server 2008:Một UDF nhiều câu lệnh có thể trả về một UDT không?