gpt4 book ai didi

sql-server - 检查表中是否存在可能不存在的记录

转载 作者:行者123 更新时间:2023-12-02 22:45:59 25 4
gpt4 key购买 nike

我必须检查表中是否存在某些具有特定条件的记录,而表中可能不存在,并且我必须在标量函数中执行此操作。

这是我的代码:

CREATE FUNCTION CheckIfRecordsExistInTestTable()
RETURNS INT
BEGIN
DECLARE @Result INT
SELECT @Result =
CASE WHEN OBJECT_ID('TestTable') IS NULL THEN 0
ELSE
CASE WHEN EXISTS(SELECT * FROM TestTable) THEN
1
ELSE
0
END
END
RETURN @Result
END

在 SQL Server 中尝试执行以下语句时:

SELECT dbo.CheckIfRecordsExistInTestTable()

只要 TestTable 存在,它就会返回我的预期结果。但每当它不存在时,SQL Server 就会引发异常(无效的对象名称“TestTable”),并且我无法得到我所期望的结果(在这种情况下我想要零返回值)。那么,您建议如何解决这个可以编码为标量函数的问题?

最佳答案

另一个答案给出了正确的解决方法。

至于为什么你会遇到这个问题......

这是一个编译时错误。

如果语句引用了不存在的对象,编译会推迟到执行之前,但最终整个语句仍然需要在执行之前编译到执行计划中。

当表不存在并且该语句的执行甚至没有开始时,此操作将失败。

(它尝试创建的执行计划 - 使用 passthru predicate 以避免在不满足 CASE 时评估条件)

enter image description here

在解决方法中,针对 testtableSELECT 被移至不同的语句中。该语句的编译仍然被推迟,并且由于该语句从未执行,因此一切正常。

关于sql-server - 检查表中是否存在可能不存在的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34574922/

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