【问题标题】:How to insert a new row to a table only if when same value does not exist, else update the related contents?仅当相同值不存在时如何向表中插入新行,否则更新相关内容?
【发布时间】:2019-02-21 23:28:28
【问题描述】:
表格:
emergency_tab (user_id, emergency_no)
和
约束 (user_id [primary key])
当收到id 和no 时,我需要将这些值insert 发送到user_id 和emergency_no 列中的emergency_tab。如果存在具有相同user_id 的列,我只想更新emergency_no,不需要insert 新行。
我正在使用Visual Studio 2010 和MS SQL Server 2008 内置在vs10
【问题讨论】:
标签:
sql-server
sql-server-2008
visual-studio-2010
insert-update
on-duplicate-key
【解决方案1】:
我相信这被称为“upsert”,您可以使用 MERGE 关键字,例如:
MERGE [devLaserViso].[dbo].[Machine] t WITH (HOLDLOCK)
USING [devLaserViso].[dbo].[TempMachine] s
ON (s.MachineName = t.MachineName)
WHEN MATCHED THEN
UPDATE SET t.MachineName = s.MachineName,
t.ProgramName =s.ProgramName
WHEN NOT MATCHED BY TARGET THEN
INSERT (MachineName,ProgramName) VALUES (s.MachineName, s.ProgramName);
来自https://stackoverflow.com/a/50232866
【解决方案2】:
它正在工作
IF (SELECT COUNT(*) FROM emergency_tab WHERE user_id='?')<>0
BEGIN
--UPDATE
END
ELSE
BEGIN
--INSERT
END