0

I have trouble to create stored procedure to do skip for existed data and insert for not existed data.

Here is the current code:

ALTER PROCEDURE [dbo].[PrezentaImport2]
    @CodAngajat INT,
    @Data DATE,
    @CodTipOra VARCHAR(50),
    @R1DAL NUMERIC(10,1),
    @R1ALL NUMERIC(10,1),
    @R1TOT NUMERIC(10,1),
    @IdUtilizatorAdaugare INT
AS
    INSERT INTO Prezente (IdAngajat, IdTipPostDeLucru, IdPostDeLucru, IdDepartament, 
                          IdEchipa, IdLinie, Data, IdTipOra, R1DAL, R1ALL, R1TOT, 
                          IdUtilizatorAdaugare, DataAdaugare)
        SELECT 
            Angajati.Id, Angajati.IdTipPostDeLucru, Angajati.IdPostDeLucru, Angajati.IdDepartament,
            Angajati.IdEchipa, Angajati.IdLinie, @Data, TipuriOre.Id, @R1DAL, @R1ALL, @R1TOT,
            @IdUtilizatorAdaugare, GETDATE()
        FROM 
            Angajati
        INNER JOIN 
            TipuriOre ON TipuriOre.CodTipOra = @CodTipOra 
                      AND Angajati.CodAngajat = @CodAngajat

Thank you.

Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786
Peki Peki
  • 7
  • 2

1 Answers1

0

Your code looks like SQL Server. A typical method uses merge. It looks something like this:

ALTER PROCEDURE [dbo].[PrezentaImport2] (
    @CodAngajat INT,
    @Data DATE,
    @CodTipOra VARCHAR(50),
    @R1DAL NUMERIC(10,1),
    @R1ALL NUMERIC(10,1),
    @R1TOT NUMERIC(10,1),
    @IdUtilizatorAdaugare INT
AS
BEGIN
    MERGE Prezente as target
        USING (SELECT . . .
               FROM Angajati a INNER JOIN
                    TipuriOre t
                    ON t.CodTipOra = @CodTipOra AND a.CodAngajat = @CodAngajat
              )
        ON target.? - source.?
    WHEN MATCHED THEN
        UPDATE SET IdAngajat = source.IdAngajat,
                   IdTipPostDeLucru = source.IdTipPostDeLucru,
                   . . .
    WHEN NOT MATCHED THEN
        INSERT (IdAngajat, IdTipPostDeLucru, IdPostDeLucru, IdDepartament, IdEchipa, IdLinie, Data, IdTipOra, R1DAL, R1ALL, R1TOT, IdUtilizatorAdaugare, DataAdaugare)
            VALUES (source.Id, source.IdTipPostDeLucru, source.IdPostDeLucru, source.IdDepartament, source.IdEchipa, source.IdLinie, @Data, source.Id, @R1DAL, @R1ALL, @R1TOT, @IdUtilizatorAdaugare, GETDATE()
    END;
END;

You will need to fill in the ? with the columns that define a duplicate, and the . . . with the rest of the assignment statements that you want.

Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786