如果记录不存在,则检查并插入SQL Server 2008合并语句

时间:2012-05-14 11:37:06

标签: sql-server merge

我试图通过sql脚本检查记录存在的某些条件来将记录添加到表中。我正在尝试使用Merge Statement。它不起作用不能解决我出错的地方。有人可以帮我弄这个吗?。感谢

MERGE Categories As target
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName'
    ) AS source on (source.CategoryKey = target.CategoryKey)
WHEN Not Matched THEN
    INSERT VALUES ('TestName');

2 个答案:

答案 0 :(得分:2)

这将完成工作:

MERGE Categories As target
USING (SELECT 'TestName' AS CategoryName) AS source 
    ON (source.CategoryName = target.CategoryName)
WHEN NOT MATCHED THEN
    INSERT (CategoryName) VALUES ('TestName');

答案 1 :(得分:2)

你到底想要完成什么?

我问,因为你使用的是与目标相同的表和源,因为你正在比较我认为是主键的CategoryKey,WHEN Not Matched条件永远不会被评估,因为如果你有ID为1,2和3的表,并与ID = ID的自身进行比较,所有行都将计算为true。

尝试将WHEN Not Matched THEN更改为WHEN Matched then UPDATE并编写一个简单的测试更新,您可以看到我正在谈论的行为

EDIT 试试这个(假设你的ID是自动递增的)

MERGE Categories As target
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName'
    ) AS source on (source.CategoryName = target.CategoryName)
WHEN Not Matched THEN
    INSERT VALUES ('TestName');