动态SQL EXEC问题

今天使用EXEC(@SQL)的时候出现了一个奇怪的现象。我的@SQL定义为NVARCHAR(MAX),然后赋值给它的字符串长度LEN()大概是5k,结果在执行EXEC(@SQL)的时候报错了,报错说在某个字符附近有错误。
然后这个字符比较偏后,我试着删除一点空格(后台代码动态生成的SQL有很多多余的空格),这个报错的字符的Index就一直后移,最后执行EXEC(@SQL)就没有报错了,正确查询。问题是NVARCHAR(MAX)的长度绝对超过了5k,虽然整个SQL都是从粘贴板粘贴出来的,但是绝对完整,后来通过删除空格能正确执行也说明语句本身的正确性。
难道是EXEC()里面的字符串长度不允许超出某个大小嘛?后来我尝试用NVARCHAR(MAX)的@sql1,@sql2,@sql3拼接原来的@SQL,执行EXEC(@sql1+@sql2+@sql3)却能正确执行,这就否定了是因为EXEC()里面字符串长度的问题。
至今没明白,但是确实通过分解SQL语句动态执行解决了问题。

猜你喜欢

转载自blog.csdn.net/qq_31729917/article/details/83870185