使用Case语句要么插入表或更新现有行
问题描述:
可能重复:
Solutions for INSERT OR UPDATE on SQL Server
Only inserting a row if it's not already there使用Case语句要么插入表或更新现有行
我的标题几乎说明了什么,我试图做,但我会详细介绍一下。在创建存储过程时,首先检查它是否已经存在(通过比较两个参数),如果存在,它将更新行中的特定列,并且如果该行不存在,会在表格中插入一个新行。
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
答
您可能要请看看MERGE (Transact-SQL)声明。
对目标表执行基于 的对源表的连接结果的插入,更新或删除操作。例如,您可以通过 插入,更新,或基于其他表中找到的差异在一个 表中删除的行同步两个表。
答
你可以这样做:
IF EXISTS(SELECT * FROM MyTable WHERE...)
--value exists perform update
BEGIN
UPDATE...
END
ELSE
--value doesnt exist perform insert
BEGIN
INSERT ...
END
[案例不是流控制方法](http://msdn.microsoft.com/en-us/library/ms181765.aspx)SQL Server的哪个版本? –
您还需要修复您的'UPDATE'声明需要在'UPDATE MyTable的SET的形式MyField的= ...' – JonH
的Microsoft SQL Server 2008 – Brandon