使用存储过程,以便可以将输出保存在文件中或作为输出参数

Use stored procedure so that the output can be saved in a file or as an output parameter

我正在使用 SQL Server 2008。我有一个存储过程 returns XML 数据。我想使用存储过程使用 `bcp' 和 return 输出到 XML 文件或在另一个存储过程中调用存储过程并将数据存储为 XML 变量。

要将其保存到文件中,存储过程因此没有 OUTPUT 参数并且 returns 数据为 XML。

这个有效

SET @CopyXmlCmd = 'bcp "EXEC CreateXMLFileOfDatabase " queryout "' + @FileAndPath + '" -T -w -S ' + @@SERVERNAME + ' -d ' + DB_NAME()
EXEC master..XP_CMDSHELL @CopyXmlCmd

存储过程CreateXMLFileOfDatabase没有输出或输入参数。但是我还需要让这个存储过程为此工作:

DECLARE @XmlTargetDB XML;
EXEC CreateXMLFileOfDatabase @ResultDB = @XmlTargetDB

此版本存储过程的签名是这样的:

CREATE PROCEDURE [dbo].[CreateXMLFileOfDatabase] @ResultDB XML OUTPUT

我可以 bcp 使用具有输出参数的存储过程并将结果存储到文件吗?

您可以尝试这样的操作:

我假设您的 SP 中的最终命令是 SELECT TheXml;

在这种情况下,您可以声明一个配件 table 并插入结果:

DECLARE @tbl TABLE(MyXMLColumn XML);
INSERT INTO @tbl(MyXMLColumn)
EXEC YourProcedure;

--从这个table你可以设置值到一个XML变量:

DECLARE @ResultXML XML;
SELECT @ResultXML=MyXMLColumn FROM @tbl;

更新:示例

试试这个:

CREATE PROCEDURE dbo.TestOutputXML
AS
BEGIN
    SELECT CAST('<root>test</root>' AS XML) AS Test
END
GO

DECLARE @tbl TABLE(MyResult XML);

INSERT INTO @tbl(MyResult)
EXEC dbo.TestOutputXML;

DECLARE @MyXMLVariable XML=(SELECT TOP 1 MyResult FROM @tbl);

SELECT @MyXMLVariable;
GO

DROP PROCEDURE dbo.TestOutputXML;