[英]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.