表tblidset在第一次运行时不包含任何内容,那么当我在代码中第一次调用此存储过程时,它应该从表中获取最高值,以便构建值随着程序数据的增长而变化。错误的问题是它在第一次运行时总是返回0。现在困住了几个小时。关心帮助?这是我的脚本:我的存储过程总是返回0
CREATE PROCEDURE CREATENEWID
@TYPE AS INT
AS
BEGIN
DECLARE @CNT AS INT;
DECLARE @DOCNO AS BIGINT;
DECLARE @DOCID AS BIGINT;
SELECT @CNT = ISNULL(COUNT(*),0) FROM TBLIDSET
--CHECK IF THERE IS NO VALUE AS OF DATE AND INSERT DEFAULT VALUES
IF @CNT = 0
BEGIN
INSERT INTO TBLIDSET SELECT TOP 1(DOCID),0 FROM INVHDR ORDER BY DOCID DESC
END
DECLARE @NUM AS INT;
IF @TYPE = 1
BEGIN
UPDATE TBLIDSET SET DOCID = DOCID +1
SELECT @NUM = DOCID FROM TBLIDSET
END
ELSE
BEGIN
UPDATE TBLIDSET SET DOCNO = DOCNO + 1
SELECT @NUM = DOCNO FROM TBLIDSET
END
PRINT @NUM
RETURN @NUM
END
GO
你为Type参数传递了什么? – Steve
使用'MAX + 1'作为ID是一个*问题*,因为它很容易导致重复的值。此外,此代码不会查找*最大* ID,它只会返回一个随机数。 'SELECT @NUM = DOCID FROM TBLIDSET'可返回任何*的底层值 –
而不是尝试生成自己的序列,请使用SQL Server的[SEQUENCE](https://msdn.microsoft.com/en-us/library /ff878058.aspx)功能,自SQL Server 2012起可用。您使用的是哪个版本? –