在考慮高併發的情況下,主鍵id往往是放在一個單獨的表裏管理的,這個表裏存着所有的表名和其最大id
新增時,刷新這個表裏的最大值,並取回。
存儲過程腳本
USE [YourDB]
GO
/****** Object: StoredProcedure [dbo].[UP_BillID] Script Date: 2020-06-21 21:30:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UP_BillID] -- 易寶單據最大值自動獲取與更新用法
@UpTableName VARCHAR(30), -- 表名
@ReturnID int OUTPUT -- 返回的主健值
AS
BEGIN
set nocount on
IF EXISTS(SELECT 1 FROM SYSStream WHERE TableName=@UpTableName)
BEGIN
SELECT @ReturnID = MAXID FROM SYSStream WHERE TABLENAME = @UpTableName
UPDATE SYSStream SET MAXID = @ReturnID + 1 WHERE TABLENAME = @UpTableName --主表佔用更新最大健值ID
END
ELSE
BEGIN
SET @ReturnID=1
INSERT INTO SYSStream(TableName, MaxID) VALUES(@UpTableName,2) --此處爲2
END
END
php腳本:
$t_table_name = 'YourTableName';
$M = M('','', 'yibao_25');
$sql = "DECLARE @ID INT
EXEC dbo.UP_BillID '{$t_table_name}', @ID OUTPUT
SELECT @ID AS BILL_ID";
$d = $M->query($sql);
$BILL_ID = $d[0]['BILL_ID'];
如果執行存儲過程報這個錯:
The active result for the query contains no fields.
加上一行 set nocount on 就可以了