この質問への回答を検索しているときに、StackOverflowでこの人気のある投稿を見つけました。残念ながら、完全には機能しません。質問はこれです:
変更(例)を実行する前に、テーブル(または別のオブジェクト)の存在を確認する方法はありますINSERT
か?前述の投稿はこれを示唆しています:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'questionableTable'))
BEGIN
INSERT INTO dbo.questionableTable VALUES ('success!');
END
エラー:Invalid object name 'dbo.questionableTable'.
INSERT
これに伴う問題は、SQL Serverがステートメントを解析するときに失敗し、それdbo.questionableTable
が存在しないことを示していることです。前のINFORMATION_SCHEMA
チェックはそれに影響を与えていないようです。
この種のクエリを書く方法はありますか?特にSQLServerの場合。しかし、そのようなものが存在する場合は、他のデータベースシステムでも同様の操作を行いたいと思います。
この質問の背後にある動機は、互いのテーブルのサブセットを含む複数のデータベースがあるためです。私が望んでいるのは、すべてのデータベースに適用でき、そこに存在するテーブルのみを変更する(実行時にエラーが発生しない)単一のスクリプトを作成することです。