exec 限制为 4000 个字符?

1 sql-server dynamic-sql exec

尝试执行此脚本仅给出第一个选择结果

declare @sp nvarchar(max)
select @sp = concat(N'select 1 ', replicate('-', 5000), char(13) + char(10), N'select 2')
exec (@sp)
Run Code Online (Sandbox Code Playgroud)

但是当我将连字符降低到 1000 时,我还得到了第二个选择 如何克服这个限制?

Pau*_*ite 7

你的问题出在CONCAT.

文档所述,返回类型取决于参数的类型。如果混合使用短字符串nvarcharvarchar文字字符串,您CONCAT将返回nvarchar小于或等于 4000 的最大长度。

重写以使用max数据类型和一致的数据类型,否则可按您的意愿运行:

DECLARE @sp nvarchar(max);

SELECT @sp = CONCAT
    (
        CONVERT(nvarchar(max), N'select 1 '), 
        REPLICATE(N'-', 5000), 
        NCHAR(13) + NCHAR(10), 
        N'select 2'
    );

EXECUTE (@sp);
Run Code Online (Sandbox Code Playgroud)

在线数据库<>小提琴演示