2009-02-24 88 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

相關問題