SQL在存储过程char限制中调用SSIS包

时间:2013-06-09 18:43:19

标签: sql sql-server xml ssis

我有一个存储过程,它有一个XML变量作为输入参数。 XML变量的每个节点都与某个数据库表的SQL列匹配。 存储过程简单地遍历XML节点并将它们插入表中。

我一直在使用存储过程中的“OPENXML”功能执行此操作,但我遇到了性能问题(查询需要40秒)=> SQL process XML performance: Insert into columns in a table。 我想提高性能,但我不知道从哪里开始。标准的XML函数似乎没有改进,所以我正在研究另一种选择。

我尝试使用SSIS包执行此功能。所以从我的存储过程中,我调用一个SSIS包,它有一个字符串变量作为输入参数。 我将从存储过程收到的XML作为字符串传递给包。 但我遇到了xp_cmdshell功能的问题。 它只允许最多8000个字符的命令。 这就是代码的样子:

--Execution SSIS Package
DECLARE @Command varchar(8000)
, @PackageLocation varchar(1000)
, @PackageName varchar(1000)

SET @PackageLocation = 'C:\SSIS\Package.dtsx'
SET @Command = 'dtexec /f "' + @PackageLocation + '" /set \package.Variables[Xmldata].Value;"' + @datastring + '"'

EXEC @ExitCode = xp_cmdshell @Command

问题是@datastring变量可能超过8000个字符,因此命令失败。 知道如何解决这个问题吗? 或者也许是实现此功能的其他替代方案?

感谢。

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

我将存储过程中收到的XML存储在临时“缓冲”表中,这样我就可以在SSIS包中检索它并进一步处理它。