【发布时间】:2011-12-12 11:48:59
【问题描述】:
我的表有 3 个主键:CODE_TARIF, UNITE 和 MODE_LIV。
我编写了一个存储过程来复制和粘贴,但使用不同的MODE_LIV。
例如:如果当我使用输入 MODE_LIV =3 运行此存储过程时,表 T_TARIF 和 MODE_LIV = 2, 中已经有 2 行,我将有 4 行。
ALTER PROCEDURE [dbo].[Copy_Tarif]
-- Add the parameters for the stored procedure here
@MODE_LIV int
AS
BEGIN
DECLARE @CODE_TARIF varchar(15)
DECLARE @ZONE int
DECLARE @UNITE int
DECLARE @LIBELLE varchar(30)
DECLARE @TR_DEB int
DECLARE @TR_FIN int
DECLARE @MONTANT decimal(18,2)
DECLARE tarif_cursor CURSOR FOR
SELECT CODE_TARIF, ZONE, UNITE, LIBELLE, TR_DEBUT, TR_FIN, MONTANT
FROM T_TARIF
OPEN tarif_cursor;
FETCH NEXT FROM tarif_cursor
INTO @CODE_TARIF, @ZONE, @UNITE, @LIBELLE, @TR_DEB, @TR_FIN, @MONTANT;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO [T_TARIF]
([CODE_TARIF]
,[ZONE]
,[UNITE]
,[MODE_LIV]
,[LIBELLE]
,[TR_DEBUT]
,[TR_FIN]
,[MONTANT]
)
VALUES
(@CODE_TARIF
,@ZONE
,@UNITE
,@MODE_LIV
,@LIBELLE
,@TR_DEB
,@TR_FIN
,@MONTANT
)
FETCH NEXT FROM tarif_cursor
INTO @CODE_TARIF, @ZONE, @UNITE, @LIBELLE, @TR_DEB, @TR_FIN, @MONTANT;
END
END
它可以工作,但会出现错误,请参阅视频:Strange Stored Procedure
提前谢谢你, 史蒂夫
【问题讨论】:
-
请描述错误。我不是特别想看视频来弄清楚你的问题在问什么!
-
感谢您的回复,它插入了数据但返回错误vialotion主键。
-
您的游标 SELECT 的结果集可能包含
MODE_LIV已经等于目标值@MODE_LIV的行。或者可能存在具有相同CODE_TARIF和UNITE但不同MODE_LIV的行。所以我的意思是,您应该向游标 SELECT 添加一些过滤(或者,更好的是,按照@gbn 的建议添加到 INSERT 语句的 SELECT 部分)
标签: sql stored-procedures while-loop