複雑なビューの結果をレポートのためにテーブルにダンプする簡単なスクリプトを作成しようとしています。シノニムを使用して、ビュー名とテーブル名を簡単に調整しました。シノニムの後ろにテーブルが存在するかどうかを確認するには
考えられるのは、スクリプトのユーザーは、ソースとして使用するビューの名前と、ターゲットレポートテーブルの名前を開始時と終了時に入れられるということです。テーブルが存在しない場合、スクリプトはそれを作成する必要があります。テーブルがすでに存在する場合、スクリプトは、テーブルの上にまだ存在しないビューからのレコードのみをコピーする必要があります。
以下のスクリプトは、これらすべての要件をカバーしていますが、私は同義語の後ろにテーブルが既に存在するかどうかを確認するための良い方法を見つけることができません。
CREATE SYNONYM SourceView FOR my_view
CREATE SYNONYM TargetReportingTable FOR my_table
-- Here's where I'm having trouble, how do I check if the underlying table exists?
IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_name = TargetReportingTable) = 0
BEGIN
-- Table does not exists, so insert into.
SELECT * INTO TargetReportingTable FROM SourceView
END
ELSE
BEGIN
-- Table already exists so work out the last record which was copied over
-- and insert only the newer records.
DECLARE @LastReportedRecordId INT;
SET @LastReportedRecordId = (SELECT MAX(RecordId) FROM TargetReportingTable)
INSERT INTO TargetReportingTable SELECT * FROM SourceView WHERE RecordId > @LastReportedRecordId
END
DROP SYNONYM SourceView
DROP SYNONYM TargetReportingTable
私はちょうどスクリプトの使用者を得ることができる知っていますテーブル名を 'information_schema'行にコピーして、一番上の同義語にコピーしますが、エラーのスコープが残ります。
私は変数にテーブル名を入れて、SQLを文字列として出すような、不潔なことをすることもできると知っていますが、それは私がちょっと気分が悪くなってしまいます!
シノニムの背後にある表が存在するかどうかを確認するうえで、洗練された洗練されたSQL方法がありますか?または、問題を解決する全く別の方法ですか?
、特定のRDBMSとだけではなく、「SQL」 – Barmar
申し訳ありませんが、新人のエラーをあなたの質問にタグを付けてくださいSQL ServerでOBJECT_ID関数avaliableを使用して、データベースに存在するかどうかをテストすることができます。編集していただきありがとうございます。 – Tom
シノニムがデータベース内のシノニムポイントと見なすことはできますか?またはシノニムが他のデータベースを参照している可能性がありますか? –