簡體   English   中英

是什么導致使用 SQL Server 2019 將 NVARCHAR(MAX) 限制為 4000 個字符?

[英]What is causing NVARCHAR(MAX) to be limited to 4000 characters using SQL Server 2019?

在解決我的問題后設置一個簡單的場景我在 SQL Server 2019 中聲明了一個 NVARCHAR(MAX) 參數。為了空間起見,我將省略 4680 個字符,但這可以在任何 SQL Box 上復制。

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)

我的結果是 SSMS 控制台中第一行PRINT @IDs 4000 個字符: PRINT @IDs 只需將光標移動到控制台行的末尾並查看字符數。

以及來自第二個 PRINT 行的 4680 個字符: PRINT LEN(@IDs)

什么可能導致這種情況? SQL Server 2019 中是否有需要開啟的 DBO 設置?

我相信評論已經回答了根本原因(可以通過 PRINT 返回的單個消息的長度限制)。 這是一個解決方案,它將返回您在同一批次中的多條消息中拆分的數據集。

請注意,這假設您的 ID 以逗號分隔並且沒有分隔符就無法使用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM