在存储过程字符限制中调用SSIS包的SQL

在存储过程字符限制中调用SSIS包的SQL,sql,sql-server,xml,ssis,Sql,Sql Server,Xml,Ssis,我有一个以XML变量作为输入参数的存储过程。 XML变量的每个节点都与某个数据库表的SQL列相匹配。 存储过程只是在XML节点上迭代并将它们插入表中 我一直在使用存储过程中的“OPENXML”功能来实现这一点,但我遇到了性能问题(查询时间长达40秒)=>。 我想提高表现,但我不知道从哪里开始。标准XML函数似乎没有改进,因此我正在寻找一种替代方法 我曾尝试使用SSIS包实现此功能。因此,在我的存储过程中,我调用了一个SSIS包,该包有一个字符串变量作为输入参数。 我将从存储过程接收的XML作为字

我有一个以XML变量作为输入参数的存储过程。 XML变量的每个节点都与某个数据库表的SQL列相匹配。 存储过程只是在XML节点上迭代并将它们插入表中

我一直在使用存储过程中的“OPENXML”功能来实现这一点,但我遇到了性能问题(查询时间长达40秒)=>。 我想提高表现,但我不知道从哪里开始。标准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个字符,因此该命令将失败。 你知道我怎么解决这个问题吗? 或者是实现此功能的其他替代方案

谢谢


非常感谢,

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

使用
varchar(max)
最多20亿个字符的textHi,问题是xp\u commandshell不支持“max”数据类型。如果我使用varchar(max),它会抛出一个错误。不是传递XML,而是传递XML文件的路径。该文件未存储在SQL server上,因此无法通过这种方式检索它。但是,我可以将收到的xml存储在一个新的“缓冲区”表中。然后,我可以让SSIS包首先从表中检索该数据并从表中处理它。无论如何,谢谢你的提示。