我有一个存储过程:我哪里错了?
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 –