我正在使用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)
答案 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