有两个表Document和DocumentPos。 在Document有列GUID而在DocumentPos是列DocumentGUID指表Document。
INSERT INTO [dbo].[DocumentPos] ( [GUID] ,[DocumentGUID] ,[Number] ,[Price] ) SELECT cqdp.GUID, cqdp.DocumentGUID,
cqdp.Number cqdp.Price FROM [sqlserver\instance].[testdb].[dbo].[documentpos] cqdp INNER JOIN [sqlserver\instance].[testdb].[dbo].[document] cqd ON cqd.GUID = cqdp.DocumentGUID WHERE cqdp.DocumentGUID IN ( SELECT GUID FROM [sqlserver\instance].[testdb].[dbo].[document] ) AND NOT EXISTS ( ... ) 但我怎么能包括NOT EXISTS这避免了查询与追求插入值已经存在于列GUID吗? 我想添加一个检查GUID已经存在于DocumentPos我想包括的[sqlserver\instance].[testdb].[dbo].[documentpos]。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的SQL查询中,您想要避免插入那些DocumentPos
表中已经存在的GUID
值。为了实现这个目的,您可以在NOT EXISTS
子句中检查DocumentPos
表中是否已经存在相同的GUID
。您已经很接近正确的解决方案了,只需要稍作调整即可。下面是修改后的查询示例:
INSERT INTO [dbo].[DocumentPos] ( [GUID], [DocumentGUID], [Number], [Price] )
SELECT cqdp.GUID, cqdp.DocumentGUID, cqdp.Number, cqdp.Price
FROM [sqlserver\instance].[testdb].[dbo].[documentpos] cqdp
INNER JOIN [sqlserver\instance].[testdb].[dbo].[document] cqd
ON cqd.GUID = cqdp.DocumentGUID
WHERE cqdp.DocumentGUID IN (SELECT GUID FROM [sqlserver\instance].[testdb].[dbo].[document])
AND NOT EXISTS (
SELECT 1
FROM [sqlserver\instance].[testdb].[dbo].[DocumentPos] dp
WHERE dp.GUID = cqdp.GUID
)
在这个修改后的查询中,我添加了一个NOT EXISTS
子句,它引用了[sqlserver\instance].[testdb].[dbo].[DocumentPos]
表,并且检查是否有与cqdp.GUID
相匹配的记录。如果存在这样的记录,则NOT EXISTS
返回false,从而阻止了该行数据被插入到DocumentPos
表中。这样就可以确保不会插入重复的GUID
值了。