Sql server 如果记录不存在,则要检查和插入的SQL Server 2008合并语句
我试图通过sql脚本检查记录是否存在的特定条件,将记录添加到表中。我正在尝试使用Merge语句。它不起作用,我不知道我哪里出了问题。有人能帮我吗?。谢谢Sql server 如果记录不存在,则要检查和插入的SQL Server 2008合并语句,sql-server,merge,Sql Server,Merge,我试图通过sql脚本检查记录是否存在的特定条件,将记录添加到表中。我正在尝试使用Merge语句。它不起作用,我不知道我哪里出了问题。有人能帮我吗?。谢谢 MERGE Categories As target USING ( SELECT CategoryKey From Categories where CategoryName = 'TestName' ) AS source on (source.CategoryKey = target.CategoryKe
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');
这将完成工作:
MERGE Categories As target
USING (SELECT 'TestName' AS CategoryName) AS source
ON (source.CategoryName = target.CategoryName)
WHEN NOT MATCHED THEN
INSERT (CategoryName) VALUES ('TestName');
这将完成工作:
MERGE Categories As target
USING (SELECT 'TestName' AS CategoryName) AS source
ON (source.CategoryName = target.CategoryName)
WHEN NOT MATCHED THEN
INSERT (CategoryName) VALUES ('TestName');
你到底想完成什么 我之所以这样问,是因为您使用的是作为目标和源的同一个表,并且因为您正在比较CategoryKey(我假设它是主键),所以当不匹配时,
条件将永远不会被计算,因为如果您有一个ID为1、2和3的表,并且在ID=ID的情况下与自身进行比较,则所有行都将计算为true
尝试将不匹配时的更改为匹配时的,然后更新,并编写一个简单的测试更新sop,您可以看到我所说的行为
编辑
试试这个(假设您的ID是自动递增的)
你到底想完成什么
我之所以这样问,是因为您使用的是作为目标和源的同一个表,并且因为您正在比较CategoryKey(我假设它是主键),所以当不匹配时,条件将永远不会被计算,因为如果您有一个ID为1、2和3的表,并且在ID=ID的情况下与自身进行比较,则所有行都将计算为true
尝试将不匹配时的更改为匹配时的,然后更新,并编写一个简单的测试更新sop,您可以看到我所说的行为
编辑
试试这个(假设您的ID是自动递增的)
谢谢你的回复,迭戈。但是我不想更新记录,我需要做的只是检查CategoryName为'TestName'的记录是否存在。如果存在,则不执行任何操作,否则我要添加记录。请再次阅读我的答案。我说运行更新只是为了让你了解发生了什么。以您编写查询的方式,您永远不会得到“不匹配时”的答复,谢谢迭戈。但是我不想更新记录,我需要做的只是检查CategoryName为'TestName'的记录是否存在。如果存在,则不执行任何操作,否则我要添加记录。请再次阅读我的答案。我说运行更新只是为了让你了解发生了什么。以您编写查询的方式,您永远不会得到“不匹配时”的答案,非常感谢AdaTheDev!!这真的帮了汉克斯很大的忙!!这真的很有帮助