动态 TSQL - 将大型查询链接在一起
Dynamic TSQL - Chaining Large Queries Together
这可能是一个愚蠢的问题,但我是动态 sql 及其局限性的新手(该做和不该做,我正在阅读动态 SQL 的祝福和诅咒)。
但是我正在尝试将脚本之类的模板转换为动态 sql。在我被这个特定问题难倒之前,我都很好地完成了它。
我脚本的这一特定部分超过 500 行,其中 1/4 左右是列,并为某些列重命名;该长度的另一部分是子查询的许多其他左外连接。
我知道我可以将变量设置为 nvarchar(max),但是是尝试适应这么多文本更好还是将它分成大尺寸变量并将它们连接在一起并尝试执行输入连接查询?
谢天谢地,这个大型查询的结果进入了一个 table,它可以在动态会话之外引用(如果我没说错的话)。有什么想法吗?
对于内存重用,最佳做法是在该变量完成其工作后将该变量设置为 null 吗?
感谢您对问题的长度提出任何想法和道歉。
您可以使用 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) 的最大大小。
这可能是一个愚蠢的问题,但我是动态 sql 及其局限性的新手(该做和不该做,我正在阅读动态 SQL 的祝福和诅咒)。
但是我正在尝试将脚本之类的模板转换为动态 sql。在我被这个特定问题难倒之前,我都很好地完成了它。
我脚本的这一特定部分超过 500 行,其中 1/4 左右是列,并为某些列重命名;该长度的另一部分是子查询的许多其他左外连接。
我知道我可以将变量设置为 nvarchar(max),但是是尝试适应这么多文本更好还是将它分成大尺寸变量并将它们连接在一起并尝试执行输入连接查询?
谢天谢地,这个大型查询的结果进入了一个 table,它可以在动态会话之外引用(如果我没说错的话)。有什么想法吗?
对于内存重用,最佳做法是在该变量完成其工作后将该变量设置为 null 吗?
感谢您对问题的长度提出任何想法和道歉。
您可以使用 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) 的最大大小。