2009-02-24 50 views
3

闯民宅我对提取SQL存储过程转换成.sql文件(see here)最后一个问题我还有一个问题:如何避免Resultset之间的sqlcmd空行?

如何避免或删除结果集之间的SQLCMD空行?

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

这意味着存储过程(超过4000个字符)在syscomments中分别被分成两部分,并且如果与sqlcmd一起导出到文本(.sql)文件中,此分割点处将会有一个新行。如何删除或避免它?

在此先感谢!

肖恩

回答

2

这里是更新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 @[email protected]" -o "%%a.sql" 

个人而言,我很担心这么大程序。

这是一个限制,但如果你已经存储与超过4000个字符长的行号的程序,你可能有很多,很多更大的问题不是可以解决阅读这个博客 ... 关我的存储过程有大于约150个字符的线,所以对于大多数人来说这可能不是什么大问题。正如我所说,如果你的线路很长,你会遇到更大的问题!
Adam Machanic - "Reflect" a TSQL routine

但也有想法,大的程序是不是一个问题:

“文本”字段定义为NVARCHAR(4000),所以每行只能容纳4000个字符。但是,拥有大于4000个字符的目标代码并不罕见。 Solomon Rutzky - Searching Objects for Text

+0

你好再次:)谢谢你的帮助!我会尽快尝试一下。我将这些存储过程与BizTalk Server SQL Adapter结合使用 - 每个sproc都是一个BizTalk应用程序的语句集合,该执行依赖于BizTalk提交的paremeter。关于 – seansilver 2009-02-27 13:58:04

相关问题