サーバー内のすべてのデータベースを循環し、そのサーバーでストアドプロシージャを実行して、結果テーブルに保存するクエリを作成しようとしています。
これは私がこれまでに持っているものです:
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}'.
私が達成しようとしていることについての洞察を得ることができるでしょうか?ありがとう!
次のようにコードを更新します。トリックを実行する必要があります。
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'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加