标题:关于SQL Server的存储过程 ------ 如何在存儲過程中驗証數据?
只看楼主
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
 问题点数:0 回复次数:2 
关于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
搜索更多相关主题的帖子: SQL Server 
2007-08-28 12:49
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
得分:0 
目前我使用的方法是,在执行完成后检查全局变量@error是否为零,以此来决定下一步的操作,

不过好像从书上看到Sql2005支持Try...catch语句,自己没用过,所以不是很清楚,原听熟知的朋友讲解....

帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2007-09-04 00:45
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 
Begin Try
//...
End Try
Begin Catch
//...
End Catch

すばらしいコードを書き出すのは楽しい事です
2007-09-04 09:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-165974-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.813790 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved