我必须检查表中是否存在某些具有特定条件的记录,而这些表可能不存在,因此必须在标量函数中执行此操作。
这是我的代码:
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的答案。