[英]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.