这可能是一个愚蠢的问题,但我是动态sql及其局限的新手(做和不做,我正在阅读动态SQL的祝福和诅咒)。
但是我试图将像脚本这样的模板转换为动态sql。我很顺利地完成了这个问题。
我的脚本中有一个特殊部分超过500行,其中1/4是列,并为某些列重命名这些列;该长度的另一部分是子查询的许多其他左外连接。
我知道我可以将变量设置为nvarchar(max),但是尝试适应这么多文本会更好吗,或者最好将它分成大尺寸变量并将它们连接在一起并尝试执行输入concat '查询?
值得庆幸的是,这个大型查询的结果会进入一个可以在动态会话之外引用的表(如果我说的正确的话)。有什么想法吗?
对于内存重用,最好的做法是在完成其工作后将该变量设置为null吗?
感谢您对问题的长度提出任何想法和道歉。
答案 0 :(得分:1)
您可以使用sp_executesql,如果声明为nvarchar(max),则可以传入最大2GB的sql字符串:
(来自MSDN https://msdn.microsoft.com/en-us/library/ms188001.aspx)
如果指定了Unicode常量,则必须以N为前缀。例如,Unicode常量N'sp_who'有效,但字符常量'sp_who'不是。字符串的大小仅受可用数据库服务器内存的限制。在64位服务器上,字符串的大小限制为2 GB,最大大小为nvarchar(max)。