我将记录插入数据库,每4小时更新一次
该行有近30列,我不确定要更改多少列,它可以是4到28列。只有2列保持不变,即code
和name
我目前正在做的是首先根据代码找到行,如果存在行,则先将其删除,然后再次使用新数据插入。否则将插入新行。
有没有更好的方法来执行此操作?
答案 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 MATCHED
和WHEN 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