1

変更できないストアド プロシージャがあります。このストアド プロシージャの結果は、次のような通常の select ステートメントです。

CREATE PROCEDURE LockedProcedure
AS
BEGIN
    SELECT * FROM COLORS_TABLE
END

私の問題は、「FOR XML」を指定したときにselectステートメントがどのように返されるかのように、その結​​果をXML結果として取得する必要があることですが、プロシージャ自体を変更せずに、別のストアドプロシージャを作成して、それまたはユーザー定義関数を呼び出すことができます。

これは、ロックされているため変更できない手順の例です。

結果を XML 結果として取得する方法 NOT XML FILE...ハードディスクに物理ファイルは必要ありません。

ありがとう。

4

2 に答える 2

0

これと同様の問題がありましたが、私の場合、ストアド プロシージャの編集は可能です。OPはストアドプロシージャがロックされていると述べていますが、私はまだこのソリューションをここに投稿して、他の人がそれに出くわしたいと思っていました. このソリューションは、ストアド プロシージャが動的 SQL を使用して一部のデータを選択することを前提としていますが、非動的 SQL のケースにも同様に簡単に適用できます。

  1. "@lp_ReturnAsXML BIT = 0" などのパラメーターを sp に追加します。true に設定すると、「FOR XML RAW」または同様のコマンドを使用して、結果セットを XML として返します。
  2. 次に、動的 SQL を実行するための代替手段として、これをストアド プロシージャの最後に追加します。

    IF @lp_ReturnAsXML = 1
    BEGIN
        DECLARE @l_XML XML
        SET @l_SQL = 'SET @l_XML = (SELECT * FROM ( ' +
            @l_SQL + '
            ) d FOR XML RAW)'
        EXEC sp_executesql @l_SQL, N'@l_XML XML OUTPUT', @l_XML = @l_XML OUTPUT
        SELECT @l_XML
    END
    

今、このようなものが動作するはずです:

DECLARE @table TABLE
(
    Results XML
)

INSERT INTO @table
EXEC p_MyStoredProc ..., @lp_ReturnAsXML = 1
于 2016-03-04T16:16:11.577 に答える
0

解決策 1)

  1. ストアド プロシージャの出力定義に一致する一時テーブルを作成します。
  2. INSERT INTO #Tmp EXEC SPNameストアド プロシージャの結果を一時テーブルに挿入するために使用します。
  3. FOR XMLコマンドと組み合わせて使用​​しSELECT、結果を一時テーブルから xml としてフェッチします。

解決策 2)

CLR ユーザー定義関数を作成してストアド プロシージャを実行し、BCL 機能を使用して結果を xml に変換します。

于 2012-09-14T15:25:38.570 に答える