0

可能重复:
SQL Server 上的 INSERT OR UPDATE 解决方案
仅在不存在的情况下插入行

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

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

4

3 回答 3

3

您可能想看看MERGE (Transact-SQL)语句。

根据与源表连接的结果对目标表执行插入、更新或删除操作。例如,您可以通过根据在另一个表中发现的差异在一个表中插入、更新或删除行来同步两个表。

于 2012-09-25T17:25:07.800 回答
2

你可以做:

IF EXISTS(SELECT * FROM MyTable WHERE...)
 --value exists perform update
  BEGIN
    UPDATE...
  END
ELSE
  --value doesnt exist perform insert
  BEGIN
    INSERT ...
  END
于 2012-09-25T17:22:02.827 回答
1

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

IF EXISTS (SELECT * FROM Server_Status WHERE Site = @Site) 
BEGIN
    -- UPDATE statement.
END
ELSE
    -- INSERT statement.
END
于 2012-09-25T17:22:53.487 回答