SQLServerでストアドも余り作らないので、ついつい忘れてしまうので備忘録がてら記載。
まじめに仕事をしてるって事で。
良くある自動番号採番用ロジックです。
「トランザクション」「行ロック」に対応している(はずww)。
create procedure dbo.fnGetCurrentNo(@パラメータ int, @戻り値 int output) AS
declare @l_CurNum int
begin try
-- トランザクション開始
begin transaction トランザクション名
-- 現在番号を取得(行ロック)
select @l_CurNum=現在番号 from MT_NUMBER with (ROWLOCK) where 主キー=@パラメータ
-- 現在番号を更新
update 番号管理テーブル set 現在番号=現在番号+1 where 主キー=@パラメータ
-- 正常の場合、コミット
commit transaction トランザクション名
-- 戻り値設定
set @戻り値 = @l_CurNum + 1
end try
-- 例外処理
begin catch
-- ロールバック
rollback transaction トランザクション名
-- エラー出力
print ERROR_MESSAGE()
end catch
-- 終了
return
あんまり試験してないので、パクる際には自己責任でお願いしますねww
あと、間違ってたら教えて下さい!
↓クリックして頂けるとうれしいです(ワンクリック詐欺ではないです(笑))
人気blogランキングへ
日本ブログ村へ








コメントする