私は次のものを持っています(SQL Server 2005)
DECLARE @L_ID_FOO_BAR INT
BEGIN TRY
SELECT @L_ID_FOO_BAR = IDFOO
FROM BAR
WHERE IDFOO = 5
END TRY
BEGIN CATCH
SELECT @L_ID_FOO_BAR = NULL
END CATCH
BAR テーブルでは、IDFOO 列を (古いデータベースで) 持つことも、持たない (最近のいくつかのデータベースで) することもできました。したがって、欠落している IDFOO 列については、@L_ID_FOO_BAR = NULL のままにしたいと思います。その列が存在する場合は、それぞれの IDFOO を選択します。
ただし、その列のないベースでスクリプトを実行すると、次のようになります。
無効な列名: 'IDFOO'
私はすでにスクリプトを
IF EXISTS(SELECT 1 FROM SYSCOLUMNS
WHERE ID = OBJECT_ID('BAR') AND NAME = 'IDFOO')
しかし、これは役に立ちませんでした。無効な列について不平を言っています...
質問
a)その列の有無にかかわらず、両方のデータベースでこのスクリプトを機能させるにはどうすればよいですか?
b) try-catch が無効な列エラーを非表示にしないのはなぜですか?