Menyiapkan skenario sederhana setelah mengurangi masalah saya, saya mendeklarasikan parameter NVARCHAR(MAX) di SQL Server 2019. Demi ruang, saya akan menghilangkan 4680 karakter, tetapi ini dapat diduplikasi pada Kotak SQL apa pun.

DECLARE @IDs NVARCHAR(MAX);
    BEGIN
        --I added 4680 characters here but cut it down for question here
        SELECT @IDs = '11240,10677,11128,11183,11248,'
        
    END 
    PRINT @IDs
    PRINT LEN(@IDs)

Hasil saya adalah 4000 karakter di konsol SSMS dari baris PRINT pertama: PRINT @IDs. Hanya memindahkan kursor saya ke akhir baris konsol dan melihat jumlah karakter.

Dan 4680 karakter dari baris CETAK kedua: PRINT LEN(@IDs)

Apa yang bisa menyebabkan ini? Apakah ada pengaturan DBO di SQL Server 2019 yang perlu diaktifkan?

0
JoJo 20 November 2020, 18:09

1 menjawab

Jawaban Terbaik

Saya percaya komentar telah menjawab akar permasalahan (batas panjang satu pesan yang dapat dikembalikan melalui PRINT). Berikut adalah solusi yang akan mengembalikan kumpulan data Anda yang terbagi di antara beberapa pesan dalam kumpulan yang sama.

Harap dicatat, ini mengasumsikan bahwa ID Anda dipisahkan koma dan tidak akan berfungsi tanpa pembatas.

DECLARE @IDs NVARCHAR(MAX);
DECLARE @remainder INT;

SET @IDs = 'Long delimited list here'

WHILE LEN(@IDs) > 0
BEGIN
    SET @remainder = CHARINDEX(','/*delimiter here*/,REVERSE(SUBSTRING(@IDs,0,4000)),0)
    PRINT SUBSTRING(@IDs,0,4000-@remainder)
    SET @IDs = SUBSTRING(@IDs,4000-@remainder/*+1 to remove the comma starting the new set*/,LEN(@IDs))
END
1
Andrew O'Brien 20 November 2020, 16:05