开发者社区 问答 正文

如何添加不存在于SQL插入查询选择和LinkedServer吗

有两个表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]。

展开
收起
SONGYiiiD 2019-12-05 23:06:09 1530 分享 版权
阿里云 AI 助理回答

在您的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值了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答