2013-05-17 60 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