Sql server SSIS的SQL命令中不支持Declare语句

Sql server SSIS的SQL命令中不支持Declare语句,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,我正在尝试使用SSIS执行以下操作。我正在使用SDT最新版本并查询SQL Server 2008 R2 有没有人能建议我是否做错了,是否有更好的方法 我基本上需要从源代码执行一个存储过程,并将结果存储在目标代码中。大约有20个存储过程 每个存储过程都将XML作为输入。我已经在其中创建了一个控制任务,它是一个数据流任务。在数据流中,我正在创建oledb源 我已选择数据访问模式作为SQL命令。我在下面创建了我的查询,但当我预览时,我得到一个错误,说declare语句不受支持 DECLARE @xml

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

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

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

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

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

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源?

我建议分步骤执行:

在SSI中创建变量:

xmldata字符串集=“”

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

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

选择不同的top 1000(mc.companyId)作为id 来自ciqMarketCap mc 加入ciqcompanyc 关于c.companyid=mc.companyid 其中,对于xml路径(“”),c.companyStatusTypeId不在(5,6)中,c.companyTypeId不在(1,4)中,类型为root('partyIds')

将结果集更改为XML

映射结果xmldata

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

SQL源类型:变量

源变量:SQLquery


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

为什么不创建一个满足您需要的包装器SP,并从SSI调用它?您的意思是我在包装器中执行20个StoredProc,但我如何将20个结果集定向到destinationI I is new SSI中的20个表。如果你能给我举个例子,我会很有帮助的。另外请注意,xml的逻辑对于所有SPSS都是相同的,使用数据流任务、oledb源、连接管理器如何。如何配置这些sp的实际功能是什么?如果它是一个游标,您可以在SSIS中执行foreach循环并跳过XML。StoredProcess包含将根据提供的XML输入检索记录的联接。不使用游标如何创建上面的XML作为视图,而只是在存储过程中引用视图?因此,我从您的建议中了解到,创建视图将包含生成XML的查询。创建几个sql任务,这些任务将执行存储过程并引用视图。我说得对吗。我应该在连接管理器中设置什么查询