2

我正在尝试通过 sql 脚本检查是否存在记录的某些条件,将记录添加到表中。我正在尝试使用合并语句。它不工作无法找出我哪里出错了。有人可以帮我弄这个吗?。谢谢

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');
4

2 回答 2

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');
于 2012-05-14T11:43:59.543 回答
2

你到底想完成什么?

我问是因为您使用同一个表作为目标和源,并且由于您正在比较 CategoryKey(我假设它是主键),因此WHEN Not Matched永远不会评估条件,因为如果您有一个 ID 为 1、2 和 3 的表并在 ID=ID 的情况下与自身进行比较,所有行都将评估为真。

尝试更改WHEN Not Matched THENWHEN Matched then UPDATE 编写一个简单的测试更新 sop 你可以看到我正在谈论的行为

编辑试试这个(假设你的 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');
于 2012-05-14T11:49:27.417 回答