0

我有一个以 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 个字符,因此命令失败。知道如何解决这个问题吗?或者也许其他替代方案来完成此功能?

谢谢。

此致,

4

1 回答 1

0

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

于 2013-06-10T19:20:56.117 回答