我有一個存儲過程:我哪裏錯了?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spInsertNewPacks]
@T_ID INT OUT,
@BatchNumber VARCHAR(30) OUT,
@Count INT OUT
AS
BEGIN
DECLARE @I INT = 1
DECLARE @ID INT = 0
DECLARE @ID1 VARCHAR(50)
DECLARE @PackID VARCHAR(50)
SELECT @PackID = MAX(PackID)
FROM tblPacks
WHILE @I <= @Count
BEGIN
IF @PackID IS NULL
BEGIN
SET @I = @I + 1
SET @ID = @ID + 1
INSERT INTO tblPacks (T_ID, BatchNumber, PackID, Status)
VALUES (@T_ID, @BatchNumber,
CAST(('PK'+ (CASE WHEN len(@ID) <=3 THEN CAST(RIGHT(0.001 * @ID, 3) AS VARCHAR(20)) ELSE CAST(@ID AS VARCHAR(20)) END)) as VARCHAR(50)), 0)
END
ELSE
BEGIN
SELECT @ID1 = CONVERT(VARCHAR(50), MAX(PackID)) FROM tblPacks
SET @I = @I + 1
SET @ID = @ID + 1
SELECT MAX(PackID) as ID FROM tblPacks
INSERT INTO tblPacks (T_ID, BatchNumber, PackID, Status)
VALUES (@T_ID, @BatchNumber,
--CAST(('PK'+ (CASE WHEN len(@ID1) <=3 THEN CAST(RIGHT(0.001*@ID1, 3) AS VARCHAR(20)) ELSE CAST(@ID1 AS VARCHAR(20)) END)) as VARCHAR(50))
('PK'+ (CASE WHEN len(@ID1) <=3 THEN CAST(RIGHT(0.001*@ID1, 3) AS VARCHAR(20)) ELSE CAST(@ID1 AS VARCHAR(20)) END)), 0)
END
END
END
然後我寫道:
EXEC spInsertNewPacks 1, '101', 4
,並得到這樣的輸出:
T_ID BatchNumber PackID Status
1 101 PK001 0
1 101 PK002 0
1 101 PK003 0
1 101 PK004 0
它工作正常,但是當我又寫了EXEC命令:
EXEC spInsertNewPacks 2, '102', 3
我越來越:
T_ID BatchNumber PackID Status
1 101 PK001 0
1 101 PK002 0
1 101 PK003 0
1 101 PK004 0
2 102 PKPK004 0
2 102 PKPKPK004 0
2 102 PKPKPKPK004 0
但它必須是:
T_ID BatchNumber PackID Status
1 101 PK001 0
1 101 PK002 0
1 101 PK003 0
1 101 PK004 0
2 102 PK005 0
2 102 PK006 0
2 102 PK007 0
哪兒我去錯 - 任何想法?我想聲明的ID作爲@ ID1作爲varchhar但它沒有工作
您應該首先對PackId進行子串匹配,或者在將ID添加到ID1之前先從ID中刪除PK –