異なるスキーマに対して同じクエリ?
やあ、
質問があります。テーブルにいくつかのデータを照会します。ただし、データベースには2つの異なるバージョンがあるため、テーブルの列が変更されます。例えば:
バージョン#1の場合、table1には列があります:id、value、バージョン#2の名前、table1には列があります:id、value、title
(#2の場合、データベースに新しいtable2があります。私はそれが#1か#2かを判断するために使用します。)
ここで、1つのクエリで両方のバージョンに適応するクエリを作成する必要があります。
IF OBJECT_ID('dbo.table2', 'U') IS NULL
BEGIN
-- version #1
SELECT *
FROM table1 t1 INNER JOIN table3 t3 on t1.Name = t3.Name ......
...
END
ELSE
BEGIN
-- version #2
SELECT *
FROM table1 t1 INNER JOIN table3 t3 on t1.title = t3.Name ......
...
END
これをバージョン#2で実行すると、エラーが報告されます:t1.Name無効な列名。
おそらく、EXECを使用してこの問題を回避できると思います。これを行うためのよりエレガントな方法はありますか?
TRY CATCHを試しましたが、それでも同じエラーが報告されます。
私が見つけた奇妙なことは、次のとおりです。別のクエリがあります。
1)一時テーブル#Ldapを作成します。2)openquery(アクティブディレクトリ用)を使用して、一時テーブル#Ldapにデータを挿入します。3)次に、上記のロジックを使用して、バージョン#1か#2かを判断します。
管理スタジオのエディターでt1.Nameがエラーとして強調表示されますが、正常に動作します。エラーとしては報告されません。
これは私に不思議に思います:SQLは最初にクエリ全体をコンパイルしますか?または、他に?
誰かが解決策を知っていますか?
ありがとう