2012-03-04 36 views
3

我有一個問題,一直在困擾着我一段時間,但是我一直無法找到任何適合我的具體情況的答案。可選地用於SQL Server中的XML

目前我正在使用一組存儲過程,這些存儲過程有一個名爲AsXML的參數,它告訴proc將結果作爲XML文檔返回。現在這很好,運作良好,但我們實現這一目標的方式並不是非常好。整個查詢以字符串形式構建,並使用EXEC命令執行。就我個人而言,我覺得這很糟糕,因爲它使得更復雜的程序難以調試,而且真的是一個難題。向很少或沒有SQL經驗的新員工解釋也很困難。必須有更好的方法來做到這一點。

我已經想過使用兩個單獨的存儲過程,或者讓調用代碼將表結果轉換爲XML文檔,但這些都不會與具有最後發言權的高層代表一起飛行。我希望有人能夠提出另一個解決方案,可以勾選所有正確的框。

解決方案需要:在一個單一的存儲過程

  • 工作
  • 生成XML或基於參數的標準表的結果集
  • 不能使用動態SQL
  • 美國沒有寫查詢輸出兩次(一次使用FOR XML,一次沒有)

任何想法,建議或解決方案?

回答

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 
+0

啊,這是一個解決方案,我沒有想到這一點。會有點擔心選擇所有記錄到臨時表中然後再次選擇它們的性能,但是我想我們當前的解決方案並不是那麼快。我將有一個測試,看看。謝謝。 – djstamp 2012-03-05 08:56:45

+0

不幸的是你的其他要求勝過了速度。如果你想專注於性能,你將不得不放棄至少一個其他項目符號(重複查詢兩次,使用單獨的過程,使用動態SQL等)。 – 2012-03-05 12:52:36

+0

我想這可能會是這樣。這看起來對於我們所做的較小查詢來說是很好的。我們必須使用其他解決方案之一來處理更大,更密集的查詢。謝謝你的幫助。 – djstamp 2012-03-05 16:02:57