【问题标题】:Is there any solution/alternate to cutting off issue while dynamic SQL在动态 SQL 时是否有任何解决方案/替代方法来切断问题
【发布时间】:2014-07-14 21:22:25
【问题描述】:

我正在使用动态查询进行透视。我的透视表将有 250 多列,超过 8000 个字符。我们有什么替代方案吗?我正在使用 SQL2008。

这就是我编写 SQL 代码的方式。 http://postimg.org/image/7iqux68d5/(不是确切的 SQL,但足以显示我想要实现的目标。)

谢谢

【问题讨论】:

  • 您尝试这样做通常是代码异味的症状。如果您发布另一个问题,可能会有更好的解决方案 - 250 列可能太宽而无法很好地阅读,如果这很常见,您可能希望将其设为视图...

标签: sql sql-server-2008 dynamic dynamic-sql


【解决方案1】:

您使用的 print 语句最多只能容纳 8000,这就是 print 显示不完整查询的原因,因此当您执行时,您将在使用 NVARCHAR(MAX) 后得到正确答案。

【讨论】:

  • 您好,感谢您的回复。我在执行时遇到同样的错误。我将变量用作:DECLARE @SQL NVARCHAR(MAX) 并将其作为 EXEC (@SqL) 执行
  • 不仅是@SQl 查询,您还需要将变量数据类型更新为 NVARCHAR(MAX),您将在其中填充 250 多列。
  • 也试过了,但没有运气。我希望我可以向您展示 SQL 语句。
  • 我正在尝试在此处发布实际查询,但变量的“@”字符不允许我发布它。
  • 检查链接以了解我是如何构建查询的。 postimg.org/image/7iqux68d5
【解决方案2】:

我认为您担心将存储在变量中的字符串超过 8000 个字符的长度,对吧?

然后试试这个:

declare @string nvarchar(max);

看到这在我的最后工作:

DECLARE @String nvarchar(max);
SELECT @String = REPLICATE(CAST('a' AS NVARCHAR(MAX)),100000);
SELECT LEN(@String)

【讨论】:

  • 嗨 Nitin,是的,你说得对。我使用了 NVARCHAR 但结果是一样的。甚至 Print @SQL 现在也显示了完整的语句。它正在切断。还有什么建议吗?
  • 您是否尝试将其声明为 NVARCHAR(MAX)?看我的回答
  • 是的,你也试过了。它给了我同样的结果。
  • Nithin,尝试在 EXEC 语句中使用它并尝试删除 LEN 函数。
猜你喜欢
  • 1970-01-01
  • 2021-02-01
  • 2020-10-29
  • 2017-03-06
  • 1970-01-01
  • 2011-05-28
  • 2014-03-22
  • 2016-10-03
  • 2017-06-28
相关资源
最近更新 更多