2016-02-25 48 views
0

我正在調試一個較大的腳本,並縮小到一個函數正在創建時,它應該錯誤的事實。SQL函數,應該錯誤,但相反創建

我測試了以下功能應該會失敗:

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

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

而是創建成功了。任何想法爲什麼?

回答

2

默認情況下,可以通過引用不存在的表來創建存儲過程和函數定義。如果要防止此行爲,請使用SCHEMABINDING選項,如果找不到參考表,將導致錯誤發生:

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

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