使用Case语句插入表或更新现有行

时间:2012-09-25 17:18:02

标签: sql sql-server-2008 tsql insert

  

可能重复:
  Solutions for INSERT OR UPDATE on SQL Server
  Only inserting a row if it's not already there

我的头衔几乎解释了我想要做的事情,但我会详细介绍一下。我正在调用它时创建一个存储过程,首先检查该行是否已存在(通过比较两个参数),如果存在,它将更新行中的特定列,如果该行不存在则将在表中插入一个新行。

BEGIN
SELECT 
(
CASE WHEN [Site] = @site and Plant = @plant
then 
UPDATE [Status]
FROM Server_Status
WHERE [Site] = @site
ELSE
Insert into Server_Status(Name, [Path], [Site], Plant, [Status])
Values (@name, @path, @site, @plant, @status)
end
)
FROM Server_Status 
END

到目前为止我有什么,但显然不起作用。有没有比我有任何建议的SQL知识的人?

-J

3 个答案:

答案 0 :(得分:3)

您可能需要查看MERGE (Transact-SQL)语句。

  

基于目标表执行插入,更新或删除操作   关于与源表的连接的结果。例如,你可以   通过在一个表中插入,更新或删除行来同步两个表   表基于另一个表中的差异。

答案 1 :(得分:2)

你可以这样做:

IF EXISTS(SELECT * FROM MyTable WHERE...)
 --value exists perform update
  BEGIN
    UPDATE...
  END
ELSE
  --value doesnt exist perform insert
  BEGIN
    INSERT ...
  END

答案 2 :(得分:1)

您应首先使用IF EXISTS语句检查行是否存在,如下所示:

IF EXISTS (SELECT * FROM Server_Status WHERE Site = @Site) 
BEGIN
    -- UPDATE statement.
END
ELSE
    -- INSERT statement.
END