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

时间:2016-09-18 19:34:54

标签: sql-server xml bcp

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

要将其保存到文件中,存储过程不具有OUTPUT参数,并将数据作为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并将结果存储到文件中吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

我认为,SP中的最终命令是SELECT TheXml;

在这种情况下,您可以声明拟合表并插入结果:

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

- 在此表中,您可以将值设置为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;