繁体   English   中英

SQL Server存储过程-如果存在则跳过,否则插入

[英]SQL Server stored procedure - skip if exists, else insert

我很难创建存储过程来跳过现有数据并插入不存在数据。

这是当前代码:

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

谢谢。

您的代码看起来像SQL Server。 一种典型的方法是使用merge 看起来像这样:

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;

您将需要填写? 与定义重复项的列,以及. . . . . . 与所需的其余分配语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM