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

这是我的代码:

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'),而我无法获得期望的值(在这种情况下,我希望返回值为零)。
那么,对于这个可以编码为标量函数的问题,您打算怎么做?

最佳答案

尝试像这样更改function

CREATE FUNCTION Checkifrecordsexistintesttable()
returns INT
  BEGIN
      DECLARE @Result INT

      IF Object_id('TestTable') IS NULL
        SET @Result = 0
      ELSE
        SELECT @Result = CASE
                           WHEN EXISTS(SELECT 1 FROM testtable) THEN 1
                           ELSE 0
                         END

      RETURN @Result
  END;

要了解有关错误背后原因的更多信息,请查看Martin的答案。

10-05 21:34