我正在使用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
并将结果存储到文件中吗?
答案 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;