0

サーバー内のすべてのデータベースを循環し、ストアド プロシージャを実行して結果テーブルに保存するクエリを作成しようとしています。

これは私がこれまでに持っているものです:

CREATE table results (Severity INT, PurchaseOrderNumber INT,
                      PurchaseOrderLineNumber SMALLINT, ShipmentNumber SMALLINT,
                      ErrorCode int, ErrorText VARCHAR(256), DateCreated datetime)

EXECUTE sp_msForEachDB '
    IF "?" LIKE "VIS%"
        BEGIN
            USE "?"
            INSERT INTO results EXECUTE IC_PURCHASEORDER
        END
    '
SELECT * FROM results

DROP TABLE results

このコードから達成したいことは、サーバー内のすべてのデータベースに対して IC_PURCHASEORDER ストアド プロシージャを実行し、その結果を作成された結果テーブルに記録することです。その後、それらの結果をスーパーバイザーに電子メールで送信し、テーブルをドロップすることができますが、それは別の仕事です. IF ステートメントに構文エラーが存在することはわかっています。その結果、次のエラーが発生します。

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '{insert database name here}'.

私が達成しようとしていることについての洞察を得ることは可能でしょうか? ありがとう!

4

1 に答える 1

0

次のようにコードを更新すると、うまくいくはずです。

CREATE table results (Severity INT, PurchaseOrderNumber INT,
                          PurchaseOrderLineNumber SMALLINT, ShipmentNumber SMALLINT,
                          ErrorCode int, ErrorText VARCHAR(256), DateCreated datetime)

    exec sp_msForEachDB 'use [?];
                    if ''?'' like ''vis%''
                    begin
                        if object_id(''IC_PURCHASEORDER'') is not null
                        begin
                             INSERT INTO results EXECUTE IC_PURCHASEORDER
                        end
                        else
                        begin
                             print ''missing proc in ?''
                        end
                    end'

    SELECT * FROM results

    DROP TABLE results

簡単なテスト...これを実行すると、「%a%」のようなすべてのデータベースが表示されます:

exec sp_msForEachDB 'use [?];
                    if ''?'' like ''%a%''
                    begin
                        select ''? is like a''
                    end
                    else
                    begin
                        select ''? is not like a''
                    end'
于 2014-06-18T20:45:56.197 に答える