ストアドプロシージャを使用するproductidの英数字の値を1増やしています。私の手続きでは、10レコードまでの値をインクリメントして、10に達するとPRD0010と言っています...それ以上のインクリメントはありません...しかし、問題は、 と同じ値のPRD0010 ..を各SP呼び出しに対して繰り返しています。このSQLストアドプロシージャで、重複したIDを生成しているのはなぜですか?
この原因は何ですか?
SELECT TOP 1
@NId = cast(substring(id, 4, len(id)) as int)
FROM tblProduct order by LEN(id) DESC, ID DESC
へ
create table tblProduct
(
id varchar(15)
)
insert into tblProduct(id)values('PRD00')
create procedure spInsertInProduct
AS
Begin
DECLARE @PId VARCHAR(15)
DECLARE @NId INT
DECLARE @COUNTER INT
SET @PId = 'PRD00'
SET @COUNTER = 0
SELECT @NId = cast(substring(MAX(id), 4, len(MAX(id))) as int)
FROM tblProduct group by left(id, 3) order by left(id, 3)
--here increse the vlaue to numeric id by 1
SET @NId = @NId + 1
--GENERATE ACTUAL APHANUMERIC ID HERE
SET @PId = @PId + cast(@NId AS VARCHAR)
INSERT INTO tblProduct(id)values (@PId)
END
astander->正確にあなたが正しいです...ウル返事 – Jims
のためにその作業fine..thanksは、追加の問題は、この技術は、同時挿入して固有のIDを生成しないということです。 –