(可选)在SQL Server中使用XML

时间:2012-03-04 21:13:24

标签: sql-server-2008 tsql

我有一个问题一直困扰着我一段时间,但我找不到任何合适的答案来解决我的具体情况。

目前我正在使用一组存储过程,这些存储过程具有一个名为AsXML的参数,该参数告诉proc将结果作为XML文档返回。现在这很好并且运作良好,但我们实现这一目标的方式并不是非常好。整个查询以字符串形式构建,并使用EXEC命令执行。我个人认为它太可怕了,因为它使得更复杂的程序难以调试,真的是一个眼睛。对于几乎没有SQL经验的新员工来说,这也很难解释。必须有一个更好的方法来做到这一点。

我已经考虑过使用两个独立的存储过程或让调用代码将表结果转换为XML文档,但这些都不会与最后一个说话的高层人员一起飞行。我希望有人能够提出另一个解决所有正确方框的解决方案。

解决方案需要:

  • 使用单个存储过程
  • 根据参数
  • 生成XML或标准表结果集
  • 不使用动态SQL
  • 没有让我们两次编写查询(一个使用FOR XML,一个没有)

有任何想法,建议或解决方案吗?

1 个答案:

答案 0 :(得分:4)

一个想法是构建结果并将其填入#temp表。

CREATE PROCEDURE dbo.foo
    @AsXML BIT = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * INTO #blat FROM <complicated query>;

    IF @AsXML = 1
    BEGIN
        SELECT * FROM #blat FOR XML PATH ...;
    END
    ELSE
    BEGIN
        SELECT * FROM #blat;
    END 
END
GO