关于SQL Server的存储过程 ------ 如何在存儲過程中驗証數据?
我希望把所有的驗証都寫在存儲過程中﹐在其中進行驗証﹐當出現錯誤是﹐用一個OUTPUT變量傳回錯誤信息(如下例中的@errorMsg)﹐但是我執行是﹐在第一個INSERT語句時就拋出异常﹐根本不執行其后的 IF(@@ERROR !=0)這個判斷﹐是哪里出了錯﹖/*
用于完成對Part表(物料表)的新增操作﹐
如果表單价信息﹐則同時對Quotaion表(單价表)進行操作
*/
CREATE PROCEDURE [Part_Add]
@partID varchar(18), -- 物料編號
@partName varchar(40), -- 物料品名
@partSpec varchar(40), -- 物料規格
@colorID varchar(5), -- 顏色ID
@unitID varchar(5), -- 計量單位ID
@rankID char(1), -- 環保級別ID
@depotID varchar(3), -- 存放倉庫ID
@partType1 varchar(3), -- 种類1ID
@partType2 varchar(3), -- 种類2ID
@partType3 varchar(3), -- 种類3ID
@createDate smalldatetime, -- 創建日期
@modifyDate smalldatetime =getdate, -- 修改日期
@supplierID varchar(5), -- 供應商ID
@moneyID char(3), -- 計价幣別
@price numeric(7,3), -- 單价
@getDate smalldatetime = getdate, -- 核价日期
@errorMsg varchar(200) OUTPUT -- 用于返回錯誤信息
AS
BEGIN TRANSACTION
INSERT INTO [Part] ( [PartID], [PartName], [PartSpec], [ColorID], [UnitID], [RankID], [DepotID], [PartType1], [PartType2], [PartType3], [CreateDate], [ModifyDate] )
VALUES ( @partID, @partName, @partSpec, @colorID, @unitID, @rankID, @depotID, @partType1, @partType2, @partType3, @createDate, @modifyDate )
IF (@@ERROR != 0) -- 如果新增操作未能順利完成
BEGIN
ROLLBACK TRANSACTION
SELECT @errorMsg = '新增物料未能完成﹐,請檢查您輸入的數据是否有誤﹗'
RETURN 1
END
ELSE
BEGIN
IF (@supplierID != '' ) -- 如果供應商代號不為空﹐則表示同時要完成對Quotation(單价表)的新增操作
BEGIN
INSERT INTO [Quotation] ( [SupplierID], [PartID], [MoneyID], [Price], [GetDate] )
VALUES ( @supplierID, @partID, @moneyID, @price, @getDate )
IF ( @@ERROR != 0 )
BEGIN
ROLLBACK TRANSACTION
SELECT @errorMsg = '新增物料單价未能完成﹐,請檢查您輸入的數据是否有誤﹗'
RETURN 2
END
END
END
COMMIT TRANSACTION
GO