У меня есть хранимая процедура:Где я ошибся?
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
Где я ошибся - любые идеи? Я попытался объявить идентификатор, как @ ID1, как varchhar, но он не работает
Сначала вы должны подстроить пакет PackId или сказать удалить PK из ID, прежде чем добавить его в ID1 –