廢言在前:太久沒寫文章了導致一開始找不到該怎麼登入Blog....
情境:由於stored procedure內傳入NULL導致一連串的錯誤,所以我們決定要在stored procedure內限制傳入的變數不得為NULL
然而我Google爬文的時候看到一堆都是在教我們如何把NULL塞進去不報錯,而非塞了NULL之後強制報錯。
找了很久才找到三篇比較適合我的情境的文章:
MSDN:DECLARE @local_variable (Transact-SQL),從這邊知曉沒辦法在DECLARE上頭寫not null
sqlservercentral:在這邊看到該怎麼把null的抓出來設定
CREATE PROC spMyProc
@State CHAR(2) = 'CA',
@Country VARCHAR(32) = NULL
AS
BEGIN
-- Disallow NULL Country!
IF (@Country IS NULL)
SET @Country = 'USA'
. . .
END
GO
VITO の 學習筆記:從這邊知道該如何讓它強制丟出錯誤訊息
DECLARE @msg nvarchar(2048);
SET @msg = '錯誤....訊息';
THROW 60000, @msg, 1;
最後把他們全部組起來:
DECLARE S_No nvarchar(11)
DECLARE @msg nvarchar(2048)
SET @msg = '參數中包含有null值'
if(@S_No is NULL)THROW 60000, @msg, 1
.
.
.
這樣我在TRANSACTION結束的時候就能接收到參數是NULL時的錯誤訊息,也能妥善地ROLLBACK了!
其他參考:[SQL] SQL指令重點整理(三):SQL限制(SQL Constraint)之介紹
只是個路過的新手,發文有誤請告知。