私はいくつかのデータベースを管理しており、それぞれには特定のストアドプロシージャのコピーが必要です。ストアドプロシージャのT-SQLエラーを回避するにはどうすればよいですか?
問題は、ストアドプロシージャが、そのうちの1つを除くすべてのデータベースのテーブルに挿入されることです。その1つのデータベースでは、テーブルはパーティションビューであり、更新可能ではなく、挿入する必要はありません。
私は、次のような何かをしようとしました:
CREATE PROCEDURE st_doit AS
-- Do lots of other stuff...
IF(DB_NAME() <> 'db3') BEGIN
INSERT INTO mytable...;
END
にもかかわらず、そのデータベースに、理由INSERT
声明のdb3
にストアドプロシージャを実行しようとしたとき、私はまだエラーメッセージが表示されます、挿入は実際には実行されません。ブロックTRY...CATCH
にINSERT
をラップしても役に立たなかった。
メンテナンスを容易にするため、私は実際にdb3
に手順の特別なコピーを置かないようにしたいと思います。通常、私はこのようなIF文を手続きに入れませんが、この特定のケースでは、実際には最良の解決策であり、経時的に成長して時間の経過と共に他の特殊なケースのネストになることはありません。
実際にテーブルに挿入しようとすると、SQL Serverにストアドプロシージャを実行させ、のみのみエラーが発生しますか?
編集:、動的SQLを使用すると、私のために少しも厄介だったので、私のエンド・ソリューションは、トラップとしてIF
ブロックを保つために、しかしdb3
以内に問題のあるブロックをコメントアウトすることでした。理想的ではありませんが、機能します。幸いにも、私はこのSPを頻繁に変更するつもりはありませんが、私はそれをすべてのデータベースに「完全に」コピーしたかったのです。
うわー、それは残念です。 :( – richardtallent