テーブル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
タイプパラメータにはどのようなものがありますか? – Steve
'MAX + 1'をIDとして使用すると、重複した値が簡単に出る可能性があるため、*問題*となります。また、このコードは* maximum * IDを探しません。乱数を返します。 'SELECT @NUM = TBLIDSETからのDOCID'は、基になる値の* any *を返すかもしれません。 –
独自のシーケンスを生成するのではなく、SQL Serverの[SEQUENCE](https://msdn.microsoft.com/en-us/library) /ff878058.aspx)機能は、SQL Server 2012以降で使用できます。どのバージョンを使用していますか? –