当前位置:  开发笔记 > 数据库 > 正文

检查表中是否有可能不存在的记录

如何解决《检查表中是否有可能不存在的记录》经验,为你挑选了1个好方法。

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

这是我的代码:

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'),我无法得到我所期望的(我希望在这种情况下返回零值).那么你打算为这个可编码为标量函数的问题做些什么呢?



1> Martin Smith..:

另一个答案提供了正确的解决方法.

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

这是编译时错误.

如果语句引用了不存在的对象,那么编译将被推迟到执行之前,但最终仍然需要在执行之前将整个语句编译为执行计划.

当表不存在并且甚至没有开始执行该语句时,这会失败.

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

在此输入图像描述

在变通方法中,SELECT反对testtable被移动到不同的语句中.此声明的编译仍然推迟,并且由于声明从未执行,所有工作正常.


你是天才男人.我已经更新了我的答案.我只是`Sql Server`的初学者学习所有这些东西:)
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有