IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SiteInformation'
AND COLUMN_NAME = 'Number_Injectors')
BEGIN
SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
END
ELSE
BEGIN
IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SiteInformation'
AND COLUMN_NAME = 'Injectors')
BEGIN
SELECT [Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
END
END
基本的な前提は、特定の機械に関する情報を収集するために、さまざまなサーバーから SiteInfomation というテーブルを参照する Visual Studio コードがあることです。問題は、これらのサーバーのいくつかが異なる列名 (Injectors と Number_Injectors) を持っていることを発見したことです。Visual Studio のデータ変数 Injectors は、情報を収集するために Injectors という名前の列を探しています。Injectors ではなく Number_Injectors という名前の列を持つ SiteInformation テーブルに関しては、返される値は NULL です。Number_Injectors と Injectors は、名前以外は同じものです。
StackOverflow を確認したところ、列が存在するかどうかを確認する方法に関するトピックが見つかり、上記のコードを作成しました。コードの if exist 部分は正常に動作しますが、2 つの列名のいずれも含まないサーバーでこのクエリを使用すると、エラーが発生します。
例: サーバー A の SiteInformation テーブルには列 Injectors があります。このコードが原因でエラーが発生します。
SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
同様に、サーバー B の SiteInformation テーブルには Number_Injectors 列があります。このコードが原因でエラーが発生します。
SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
私はそれを修正する方法について少し迷っています。if-exist 部分にもかかわらず、両方の Select クエリが同時に実行されているようです。どんな提案も役に立ちます。