【问题标题】:how to avoid sqlcmd blank line between Resultsets?如何避免结果集之间的 sqlcmd 空行?
【发布时间】:2009-02-24 09:53:37
【问题描述】:

参考我上一个关于将 SQL 存储过程提取到 .sql 文件中的问题(see here)我还有一个问题:

如何避免或删除Resultsets之间的sqlcmd空行?

原因(see MSDN) 当返回多个结果时,sqlcmd 会在批处理中的每个结果集之间打印一个空行。

这意味着存储过程(超过 4000 个字符)在 syscmets 中分别被拆分为两部分,如果使用 sqlcmd 导出到文本 (.sql) 文件中,则在此拆分点将有一个新行。如何消除或避免?

提前致谢!

肖恩

【问题讨论】:

    标签: sql stored-procedures sqlcmd


    【解决方案1】:

    这里是 your 批处理文件的更新(它将适用于 > 8000 个字符的限制,但很容易调整此限制):

    for /f %%a in (sp_list.txt) do sqlcmd -E -S SERVER -d DB -h-1 -Q "DECLARE @I INT, @SP1 NVARCHAR(4000), @SP2 NVARCHAR(4000) SET @I = 0 SET @SP1 = '' SET @SP2 = '' SELECT @I = @I + 1, @SP1 = CASE WHEN @I = 1 THEN text ELSE @SP1 END, @SP2 = CASE WHEN @I = 2 THEN text ELSE @SP2 END from dbo.syscomments WHERE id = OBJECT_ID('%%a') SELECT @SP1+@SP2" -o "%%a.sql"
    

    我个人对这么大的程序感到担忧。

    这是一个限制,但是如果您的存储过程的行号超过 4000 个字符,那么您可能会遇到比阅读这篇博客所能解决的大得多的问题 ... 我的存储过程中没有一个行长度超过 150 个字符,所以对于大多数人来说这可能不是什么大问题。就像我说的,如果你的台词那么长,你的问题就更大了!
    Adam Machanic - "Reflect" a TSQL routine

    但也有人认为大程序不是问题:

    “文本”字段定义为 NVARCHAR(4000),因此每行最多只能包含 4000 个字符。但是,目标代码远大于 4000 个字符的情况并不少见。 Solomon Rutzky - Searching Objects for Text

    【讨论】:

    • 再次您好 :) 感谢您的帮助!我一有空就试试。我将这些存储过程与 BizTalk Server SQL 适配器结合使用 - 每个存储过程都是一个 BizTalk 应用程序的语句集合,其执行取决于 BizTalk 提交的参数。考虑
    猜你喜欢
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2016-06-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多