sp_execute不支持超过4000个字符的动态SQL查询

时间:2018-11-21 04:23:20

标签: sql sql-server database

我正在使用sp_execute语句执行动态SQL查询。

但是sp_execute不支持超过4000个字符的动态SQL查询。

不过,它与EXEC语句配合正常。

请提出您是否有解决方案。

这是我的代码:

declare @a nvarchar(max), @b nvarchar(max), @c nvarchar(max), @d nvarchar(max)

select @d = 'a'
select @a = 'select top 1 name,''', @b = replicate(@d, 10000),
       @c=''' from sysobjects'

SELECT LEN(@a + @b + @c)

DECLARE @s NVARCHAR(max) = @a + @b + @c

EXEC sp_execute @s
EXEC(@s)

2 个答案:

答案 0 :(得分:1)

您应该使用sp_executesql。它支持nvarchar(max)。您可以参考here

但是您的问题不是sp_execute而是字符串@b。如果您确实注意到了,以下查询将给出len为8036,而不是10036

SELECT len(@a+@b+@c)

罪魁祸首是@b=replicate('a',10000),最大长度为8000。复制返回相同的数据类型a,即varchar

如果将字符串a转换或转换为nvarchar(max),它将为您提供1000个字符

@b = replicate(convert(nvarchar(max), 'a'),10000)

或者您也可以尝试

declare @d nvarchar(max)

select @d = 'a'
select @b = replicate(@d, 10000)
select len(@b)

答案 1 :(得分:1)

使用<script> $(document).ready(function(){ $("#form").submit(function(e) { e.preventDefault(); $.blockUI({ message: '<img style="width:50%" src="img_path' }); var form_data = new FormData($('form')[0]); $.ajax({ type: 'POST', url: 'url', data: form_data, processData: false, contentType: false, success: function() { $.unblockUI(); location.replace("url"); } }); 代替app.post('router', upload.array('file', 30),function(req, res) {  compressing.zip.compressDir(myfile_path).then(() => { res.download(myfile) } })

sp_executesql