ThinkPHP 调用sqlserver存储过程获取最大id

在考虑高并发的情况下,主键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 就可以了

猜你喜欢

转载自blog.csdn.net/wuzuyu365/article/details/106891677