【问题标题】:Declare statement is not supported in SQL command of SSISSSIS的SQL命令不支持declare语句
【发布时间】:2017-07-11 16:32:28
【问题描述】:

我正在尝试使用 SSIS 执行以下操作。我正在使用 SDT 最新版本并查询 SQL Server 2008 R2。

有人可以建议我是否做错了,是否有更好的方法

我基本上需要从源执行存储过程并将结果存储在目标中。大约有 20 个存储过程。

每个存储过程都将 XML 作为输入。我在该数据流任务中创建了一个控制任务。在数据流中,我正在创建 oledb 源。

我选择了数据访问模式作为 SQL 命令。我在下面创建了我的查询,但是当我预览时,我收到错误说声明语句不受支持

DECLARE @xmldata XML

SET @xmldata = (SELECT DISTINCT TOP 1000 (mc.companyId) AS id
                FROM ciqMarketCap mc 
                JOIN ciqCompany c ON c.companyid = mc.companyid
                WHERE c.companyStatusTypeId NOT IN (5, 6) 
                  AND c.companyTypeId IN (1, 4) 
                FOR XML PATH(''), TYPE, ROOT('partyIds'))

EXEC getPartiesMarketData @xmldata

如何执行其余的存储过程?我需要创建多个 oledb 源吗?

【问题讨论】:

  • 为什么不创建一个包装器 SP 来满足您的需求,然后从 SSIS 调用它?
  • 你的意思是我在包装器中执行了 20 个存储过程,但是我如何将 20 个结果集定向到目标中的 20 个表
  • 我是新的 SSIS。如果你给我一个例子会很有帮助。另请注意,xml 的逻辑对于所有 SP 都是相同的

标签: sql-server sql-server-2008 ssis


【解决方案1】:

我建议分步进行:

在 SSIS 中创建变量:

xmldata string set = ""

“Exec getPartiesMarketData”+@xmldata的SQLquery字符串设置公式

在执行sql任务中直接输入sql语句:

选择 DISTINCT 前 1000 个 (mc.companyId) 作为 id 来自 ciqMarketCap mc 加入ciq公司c ON c.companyid = mc.companyid WHERE c.companyStatusTypeId NOT IN (5,6) AND c.companyTypeId IN (1,4) for xml path(''), type, root('partyIds')

将结果集更改为 XML

映射结果xmldata

然后在另一个连接的执行 sql 中,您将执行真正的查询:

SQL 源类型:变量

源变量:SQLquery

我没有对此进行测试,但我很确定它会起作用。

【讨论】:

  • 如何使用数据流任务,oledb源,连接管理器。我该如何配置这些
  • sp 的实际作用是什么?如果它是一个游标,你介意在 SSIS 中做一个 foreach 循环并跳过 XML。
  • 存储过程包含将根据提供的 xml 输入检索记录的连接。不使用光标
  • 如何将上面的 XML 创建为视图并在存储过程中引用该视图?
  • 所以我从您的建议中了解到,创建将包含用于生成 xml 的查询的视图。创建几个将执行存储过程并引用视图的 sql 任务。我对吗。我在连接管理器中正确的查询是什么
猜你喜欢
  • 2022-09-29
  • 2011-07-26
  • 1970-01-01
  • 2016-05-30
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多