伙计们,
我正在创建 SSIS 包,其中包含执行 SQL 任务。“SQL 源类型”属性设置为变量,它使用我的包变量之一。到目前为止,一切都很好。现在所有这些都包含在“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
如果我让它执行并使用 Profiler 捕获结果,则实际运行的语句将是 \r 之前的所有内容,换句话说,只有第一行:
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.MyTable') AND name = N'MyIndex')
这显然不是我想要的。我需要运行的实际语句要复杂得多,并且希望保持它们良好的格式,以便在必要时可以直观地检查它们。这是我遇到的已知限制吗?是否有任何解决方法?
谢谢!