【问题标题】:Use stored procedure so that the output can be saved in a file or as an output parameter使用存储过程,以便可以将输出保存在文件中或作为输出参数
【发布时间】:2016-09-18 19:34:53
【问题描述】:

我使用的是 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 使用具有输出参数的存储过程并将结果存储到文件中吗?

【问题讨论】:

    标签: sql-server xml bcp


    【解决方案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;
    

    【讨论】:

    • 最后的命令是 SELECT xmlVariable。但问题是我需要使用bcp 调用此存储过程以保存到文件并从另一个存储过程调用,并且必须将输出分配给XML 变量。因此,当存储过程没有OUTPUT 参数时,它可以与bcp 一起正常工作并保存到文件中。但是这个版本在从存储过程调用时将不起作用,因为 xml 输出必须有一个OUTPUT 参数。存储过程只能返回 int。
    • 我必须有这个存储过程的 2 个版本吗?一个带有 OUTPUT 参数,一个不带有,以便在与bcp一起使用时将结果发送到文件中@
    • @GloriaSantin,不,我向您展示的方式不需要两个版本...最好 - 如果可能的话 - 将 reading 问题放入(内联表valued) 函数而不是在 SP 中,但这应该适合您的两种需求... 一般来说:如果您知道您的 SP 的最后一个SELECT 的确切结构,您可以创建一个拟合表并将其插入那里。在您的情况下,这应该是 one-column-one-row 结果...
    • 所以我不需要输出参数?
    • 但是我需要返回值是xml文件的形式。
    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多