Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perilaku TSQL aneh dengan COALESCE saat menggunakan Order By

Anda tidak dapat bergantung pada rangkaian seperti:

SELECT @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes
...

Rencana Eksekusi dan Hasil Kueri Penggabungan Agregat Bergantung Pada Lokasi Ekspresi

Contoh tergantung pada CTE/temp table/rencana eksekusi Anda akan mendapatkan hasil yang berbeda:

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;

Saya membuat sampel dan kueri pertama Anda berfungsi SqlFiddleDemo . Tetapi solusi Anda sangat bergantung pada rencana eksekusi.

Gunakan XML + BARANG untuk penggabungan sebagai gantinya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Modul SQL Server 2012 SQLPs - Mengubah lokasi saat ini secara otomatis?

  2. TAN() Contoh di SQL Server

  3. Bagaimana cara mengetahui apakah seseorang melihat salah satu catatan di database Anda?

  4. Jumlahkan dengan SQL server RollUP - tetapi hanya ringkasan terakhir?

  5. Cara Mengonversi String ke Tanggal/Waktu di SQL Server menggunakan CONVERT()