有条件地添加多行(SQL SERVER 2008)

时间:2012-07-24 02:44:38

标签: sql-server-2008 insert-update

我需要一次在表格中添加多行。这些行有一些共同的字段值。 我使用游标解决了我的问题,这是存储过程。

有没有人有更好的方法呢?

    USE [MyDataBase]
    GO


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[spAddDetailsBatch]
    (
    @IdOperTur UniqueIdentifier,
    @IdProd UniqueIdentifier,
    @Model Bit,
    @PrAd Decimal(18,2),
    @PrMe Decimal(18,2),
    @PoCo Decimal(5,2)
    )
    AS
    DECLARE @prpr_Id UniqueIdentifier
    DECLARE @IdCont UniqueIdentifier = NULL

    DECLARE CPr CURSOR FOR SELECT prpr_Id FROM trsx_PrPr WHERE (prod_Id = @IdProd)
    OPEN CPr

    FETCH NEXT FROM CPr INTO @prpr_Id
    WHILE @@Fetch_Status=0 BEGIN /*iterate through all records from cursor*/

     SET @IdCont = (SELECT cont_Id FROM trsx_Cont
                    WHERE  (prpr_Id = @prpr_Id) AND (optu_Id = @IdOperTur))

     IF @IdCont IS NULL
     BEGIN
      INSERT INTO trsx_Cont(cont_Id, prpr_Id, optu_Id, cont_Neto, cont_PrAd, cont_PrMe, cont_PoCo)
      VALUES (NEWID(), @prpr_Id, @IdOperTur, @Model, @PrAd, @PrMe, @PoCo)
     END

     FETCH NEXT FROM CPr INTO @prpr_Id
    END
   CLOSE CPr
   DEALLOCATE CPr
   RETURN

非常感谢。

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

insert into trsx_Cont(cont_Id, prpr_id, optu_Id, cont_Neto, cont_PrAd, cont_PrMe, cont_PoCo)
select (newid(), trsx_PrPr.prpr_id, @IdOperTur, @Model, @PrAd, @PrMe, @PoCo)
from trsx_PrPr
where not exists(
    SELECT 1
    from trsx_Cont
    WHERE
        trsx_Cont.prpr_Id = trsx_PrPr.prpr_Id AND 
        trsx_Cont.optu_Id = @IdOperTur
) and
trsx_PrPr.prod_id = @IdProd

我没有对此进行测试,因为它有点复杂,它可能无法正常工作,但你应该能够理解。