2013-05-17 61 views
0

民間,SSIS執行SQL任務 - 來自變量的語句 - 來自表的變量值

我正在創建包含執行SQL任務的SSIS包。 「SQL Source Type」屬性設置爲Variable,它使用我的一個包變量。到現在爲止還挺好。現在,所有這些都被封裝在「For Each」循環中,該循環從數據庫表中讀取值。你看,我有一堆表格和一堆SQL語句(存儲在VARCHAR列中),我想執行它。所有這些似乎工作,直到我在我的表中有一個多行SQL語句。如果有回車,這裏是我觀察到的。比方說,我已經保存在我的桌子這個說法,我想運行它

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.MyTable') AND name = N'MyIndex') 
DROP INDEX MyTable.MyIndex 

如果我在SSIS包設置斷點的看看變量的值,而它與這個SQL文本填充,它如下所示(請注意\ r \ n):

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.MyTable') AND name = N'MyIndex')\r\nDROP INDEX MyTable.MyIndex 

,如果我讓它執行和使用探查,聲明,其實際運行將一切都交給用\ r捕獲結果,換句話說,只有第一行:

IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.MyTable') AND name = N'MyIndex') 

這顯然不是我想要的。我需要運行的實際報表要複雜得多,並且希望將它們保持良好的格式,以便在必要時可以對其進行可視化檢查。這是我遇到的已知限制,是否有任何解決方法?

謝謝!

回答

0

多謝您用記事本++展開線的建議。這是很好的知道。

然而,我的問題是一個自我造成的問題。即使我嘗試執行的查詢包含新行,SSIS也可以正常工作。令我困惑的是,如果IF EXISTS()的計算結果爲FALSE,後面的語句將不會執行,並且不會顯示在分析器跟蹤中。例如,如果要運行此操作:

IF 1 = 0 SELECT 'No Way' 

您將只能在跟蹤輸出中看到「IF 1 = 0」。我錯誤地將這個結果誤解爲回車問題。虛驚!

+0

歡迎光臨。很高興結果不是你的問題。我也有興趣閱讀上一個關於如何在一行中格式化代碼並再次返回的問題。 – davmos