我有以下(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 不隐藏无效列错误?