我有一个经典的UPDATE或将一些数据插入表中的情况。我不确定我是否应该做一个更新,如果我得到零ROWCOUNT,那么做一个INSERT。或者,我听说有传言说MERGE声明现在取代了这个,但我不确定在这种情况下如何以及是否合适。
这里有一些示例sql来帮助演示这个......
ALTER PROCEDURE [dbo].[InsertLocationName]
(
@SomeId INTEGER,
@SomeName NVARCHAR(100)
)
AS
BEGIN
SET NOCOUNT ON
UPDATE TableFoo
SET SomeName = @SomeName
WHERE SomeId = @SomeId
-- Did we update something?
IF @@ROWCOUNT <= 0
-- Nope, so add the record.
INSERT INTO TableFoo
VALUES (@SomeName)
END
想法?
答案 0 :(得分:1)
当然 - MERGE语法可能是最简单的。你基本上需要:
所以它基本上看起来像这样:
MERGE TableFoo as t
USING TableFooSource as s
ON t.SomeID = s.SomeID
WHEN MATCHED THEN
UPDATE SET t.SomeName = s.SomeName
WHEN NOT MATCHED THEN
INSERT(SomeName) VALUES(s.SomeName)
;
最后不要忘记分号!!
马克
PS:已更新以使用您的表格和字段名称。这里的要点是 - 用于更新的数据集需要在其自己的源表中(如果需要,从例如外部文件批量导入),然后完成整个操作(所有INSERT和UPDATE)在一个SQL语句中。
答案 1 :(得分:0)