【问题标题】:Dynamic TSQL - Chaining Large Queries Together动态 TSQL - 将大型查询链接在一起
【发布时间】:2015-04-22 05:16:43
【问题描述】:

这可能是一个愚蠢的问题,但我是动态 sql 及其局限性的新手(做和不做,我正在阅读动态 SQL 的祝福和诅咒)。

但是我正在尝试将脚本之类的模板转换为动态 sql。我很好地完成了它,直到我被这个特定问题难住了。

我脚本的这一特定部分超过 500 行,其中 1/4 左右是列,并为某些列重命名;该长度的其他部分是子查询的许多其他左外连接。

我知道我可以将变量设置为 nvarchar(max),但是是尝试容纳这么多文本更好,还是将其划分为大型变量并将它们连接在一起并尝试执行 enter concat会查询吗?

谢天谢地,这个大型查询的结果进入了一个可以在动态会话之外引用的表(如果我说得对的话)。有什么想法吗?

对于内存重用,最好在完成工作后将该变量设置为 null 吗?

感谢您对问题长度的任何想法和道歉。

【问题讨论】:

  • 好吧,如果你对节省内存非常感兴趣,除非你需要,否则不要使用 NVARCHAR。加上 VARCHAR 可以容纳 8000 个字符(是 NVARCHAR 的两倍)。实际上,每个变量的最大大小只有 8KB,现在非常小,所以我认为您不必担心存储脚本的内存使用情况。
  • @Stephan 感谢您提供此信息。我最初使用 nvarchar 从更早的小得多的查询中获取输出,该查询被用作另一个查询的输入。谢谢。

标签: sql-server tsql dynamic-sql


【解决方案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) 的最大大小。

【讨论】:

  • 谢谢。现在可以了,我现在遇到的另一个问题是输出窗口大小和长度限制。它只是要输出太多的文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多