MSSQLが高く、連続して重複しない注文番号を発行します.
8990 ワード
参照先:
https://www.cnblogs.com/h-change/p/6699683.html
ここでデータベースレベルで生成されたものは、テストでは重複しません.
自分で修正したバージョンを添付します.ここでは1年分の記録を作成することもできます.プロセスは直接読むことができます.表には必ずデータがあると思います.
https://www.cnblogs.com/h-change/p/6699683.html
ここでデータベースレベルで生成されたものは、テストでは重複しません.
自分で修正したバージョンを添付します.ここでは1年分の記録を作成することもできます.プロセスは直接読むことができます.表には必ずデータがあると思います.
-- rq date num int
GO
CREATE PROC dbo.proc_CreateNewDH
AS
SET NOCOUNT ON
DECLARE
@TranCount INT=0,
@Error INT=0,
@MaxNum INT=0,
@ErrorMsg VARCHAR(MAX),
@rq DATE=CONVERT(VARCHAR(10), GETDATE(), 121)
BEGIN TRY
BEGIN TRAN
SET @TranCount=1
SELECT @MaxNum=Num+1
FROM dhlist WITH(ROWLOCK, UPDLOCK) --
WHERE rq=@rq
SET @MaxNum=ISNULL(@MaxNum,0)
IF @MaxNum=0
BEGIN
INSERT INTO dbo.dhlist (rq,Num) VALUES(@rq, 1)
SET @MaxNum=1
END
ELSE
UPDATE dhlist SET Num=Num+1 WHERE rq=@rq
END TRY
BEGIN CATCH
SET @Error=@@ERROR
SET @ErrorMsg=ERROR_MESSAGE()
IF @TranCount=1
BEGIN
ROLLBACK TRAN
--PRINT 'ROLLBACK TRAN'
--PRINT @Error
--PRINT @TranCount
END
RAISERROR(@ErrorMsg, 19, 1) WITH LOG
RETURN
END CATCH
IF @TranCount=1 AND @Error=0
COMMIT TRAN
IF LEN(CAST(@MaxNum AS VARCHAR))<=4
SELECT 'XXX'+CONVERT(VARCHAR,GETDATE(),12)+RIGHT('0000'+CAST(@MaxNum AS VARCHAR), 4) AS dh
ELSE
SELECT 'XXXX'+CONVERT(VARCHAR,GETDATE(),12)+RIGHT('000000'+CAST(@MaxNum AS VARCHAR), 6) AS dh
SET NOCOUNT OFF
GO