gpt4 book ai didi

SQL TRY-CATCH 和缺少的列

转载 作者:行者123 更新时间:2023-12-01 08:34:50 25 4
gpt4 key购买 nike

我有以下(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。

但是,在没有该列的基础上执行脚本时,我得到:

Invalid column name: 'IDFOO'

我已经用

包围了脚本
IF EXISTS(SELECT 1 FROM SYSCOLUMNS 
WHERE ID = OBJECT_ID('BAR') AND NAME = 'IDFOO')

但这并没有帮助,它提示无效的列...

问题
a) 做什么 让这个脚本在两个数据库上工作,不管有没有那个列?
b) 为什么 try-catch 不隐藏无效列错误?

最佳答案

问题 (b) 更容易回答 - 您面临的是编译时检查,它胜过在运行时工作的 TRY-CATCH。

对于(一)

DECLARE @L_ID_FOO_BAR INT;
DECLARE @SQL NVARCHAR(MAX) = '
SELECT @L_ID_FOO_BAR = IDFOO
FROM BAR
WHERE IDFOO = 5';

BEGIN TRY
EXEC sp_executesql @SQL, N'@L_ID_FOO_BAR INT output', @L_ID_FOO_BAR output;
END TRY
BEGIN CATCH
SELECT @L_ID_FOO_BAR = NULL -- redundant? it starts with NULL
END CATCH

关于SQL TRY-CATCH 和缺少的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com