Sql 应该出错但创建成功的函数

Sql function that should error but instead creates successfully

我正在调试一个更大的脚本,并将其缩小到一个函数在它应该出错的时候被创建的事实。

我测试了以下应该失败的函数:

CREATE FUNCTION ShouldFail( @x INT )
RETURNS int
AS
BEGIN 
DECLARE @i INT

SELECT @i = id FROM dbo.IDontExist
RETURN @i
END

而是创建成功。有什么想法吗?

默认情况下,可以使用不存在的 table 引用来创建存储过程和函数定义。如果要防止此行为,请使用 SCHEMABINDING 选项,如果未找到引用的 table,这将导致引发错误:

CREATE FUNCTION ShouldFail( @x INT ) 
RETURNS int
WITH SCHEMABINDING
AS
BEGIN 
DECLARE @i INT

SELECT @i = id FROM dbo.IDontExist
RETURN @i
END