根据记录删除插入操作

时间:2017-11-21 09:44:49

标签: sql sql-server

我将记录插入数据库,每4小时更新一次

该行有近30列,我不确定要更改多少列,它可以是4到28列。只有2列保持不变,即codename

我目前正在做的是首先根据代码找到行,如果存在行,则先将其删除,然后再次使用新数据插入。否则将插入新行。

有没有更好的方法来执行此操作?

3 个答案:

答案 0 :(得分:0)

如果代码存在,您可以更新它,这样您只能进行一次操作(更新)而不是两次(删除,插入)。

答案 1 :(得分:0)

为什么不首先检查您的记录是否存在,然后相应地更新或插入?

if exists(select * from MyTable where Code = @Code)

  update MyTable set Col1 = @Col1, Col2 = @Col2, Col3 = @Col3
  where Code = @Code;

else

  insert MyTable (Code, Col1, Col2, Col3)
         values (@Code, @Col1, @Col2, @Col3);

答案 2 :(得分:0)

合并声明是你的朋友,它可以处理所有三种情况。 在您的情况下,您只需处理2:WHEN MATCHEDWHEN NOT MATCHED BY TARGET

MERGE INTO MyTable AS DST
USING (
SELECT
    @Code AS Code
  , @Col1Value AS Col1
  , @Col2Value AS Col2
) AS SRC
  ON SRC.Code = DST.Code
WHEN MATCHED THEN
  UPDATE SET DST.Col1 = SRC.Col1, DST.Col2 = SRC.Col2
WHEN NOT MATCHED BY TARGET THEN
  INSERT (Code, Col1, Col2)
  VALUES (SRC.Code, SRC.Col1, SRC.Col2)
;

自SQL Server 2008以来MERGE语句可用。

文档:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql