Sql server 在使用“从选择插入”之前,如何检查重复项
我有下面的代码从链接服务器获取数据,但是如果有skip for Next或insert from select,我如何检查sqlserver表中是否有重复记录。我想使用以下字段进行比较 [客户],[销售订单日期],[销售订单编号],[项目ID],[承诺日期],[采购订单]Sql server 在使用“从选择插入”之前,如何检查重复项,sql-server,tsql,Sql Server,Tsql,我有下面的代码从链接服务器获取数据,但是如果有skip for Next或insert from select,我如何检查sqlserver表中是否有重复记录。我想使用以下字段进行比较 [客户],[销售订单日期],[销售订单编号],[项目ID],[承诺日期],[采购订单] 您可能会发现,该语句适用于此目的。它允许您指定目标表、源查询、联接条件以及在匹配或不匹配时要执行的操作。使用与exists相关的子查询来删除已存在的行: 选择。。。从…起如果不存在,请从db1.dbo.WorkOrders中选
您可能会发现,该语句适用于此目的。它允许您指定目标表、源查询、联接条件以及在匹配或不匹配时要执行的操作。使用与exists相关的子查询来删除已存在的行:
选择。。。从…起如果不存在,请从db1.dbo.WorkOrders中选择42,其中 因为您要使用insert only所以Not exists是理想的选择,不需要太多更改 试着修正你自己的错误
insert db1.dbo.WORKORDERS
([WORK ORDER #],[QUANTITY],[CUSTOMER],[SO DATE],[SO NUMBER],[ROUTING],[itemid],[CUSTOMER PN],[SHIP VIA],[PROMISED DATE],[COMMENTS],[PO #],[WO Notes])
Select
convert(varchar(10), next value for dbo.WorkOrderSequence ),
Quantity,
Customer_Bill_Name,
TransactionDate,
Reference,
Category,
ItemID,
PartNumber,
WhichShipVia,
ShipByDate,
Comment2,
CustomerInvoiceNo,
SalesDescription
FROM
(
select
x.Quantity,--
x.Customer_Bill_Name,
x.TransactionDate,
x.Reference,
X.Category,
x.ItemID,
x.PartNumber,
x.WhichShipVia,
x.ShipByDate,
x.Comment2,
x.CustomerInvoiceNo,
x.SalesDescription
from
openquery
([DB29],
'select
Customers.Customer_Bill_Name,
JrnlHdr.TransactionDate,
Cast(JrnlRow.Quantity as Decimal(38,0)) as Quantity,
JrnlHdr.Reference,
LineItem.Category,
LineItem.ItemID ,
LineItem.PartNumber,
Customers.WhichShipVia,
JrnlHdr.ShipByDate,
JrnlHdr.Comment2,
JrnlHdr.CustomerInvoiceNo,
LineItem.SalesDescription
FROM Customers
INNER JOIN JrnlHdr
ON Customers.CustomerRecordNumber = JrnlHdr.CustVendId
LEFT OUTER JOIN Address
ON Customers.CustomerRecordNumber = Address.CustomerRecordNumber
INNER JOIN JrnlRow
ON JrnlHdr.PostOrder = JrnlRow.PostOrder
INNER JOIN LineItem
ON JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
WHERE JrnlHdr.JrnlKey_Journal = 11 AND JrnlHdr.TransactionDate = CURDATE()
AND JrnlHdr.PostOrder = JrnlRow.PostOrder
AND JrnlHdr.CustVendId = Customers.CustomerRecordNumber
AND JrnlRow.ItemRecordNumber = LineItem.ItemRecordNumber
AND JrnlHdr.POSOisClosed = 0
) as x'
)t4
where not exists(
select 1 from db1.dbo.WORKORDERS WO where wo.[CUSTOMER]=t4.Customer_Bill_Name
and [SO DATE]=t4.TransactionDate AND[SO NUMBER]=t4.Reference
AND[itemid]=t4.ItemID and [PROMISED DATE]=t4.ShipByDate and [PO #]=t4.[PO #]
)
您可以使用:
这将为您提供链接服务器上不存在的记录:
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM current_database
EXCEPT
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM linked_server_current_database
这将为您提供当前服务器上不存在的记录:
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM linked_server_current_database
EXCEPT
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM current_database
我收到了以下错误消息:Msg 11719,级别15,状态1,第20行检查约束、默认对象、计算列、视图、用户定义函数、用户定义聚合、用户定义表类型、子查询、公共表表达式、派生表或返回语句中不允许函数的下一个值。任何想法[工单]都是使用序列函数创建的,这是错误的原因吗?我怎样才能修好它?非常感谢。是,在任何情况下,在内部选择中都不需要序列。即使问题没有解决。现在检查我的查询添加了一条记录6次否这是不可能的。请注释插入表名并仅验证选择结果集。问题仅存在于连接列名中不存在的位置。如何调试?我只说如果使用where,则可能不需要Distinctnot子句不正确,因为distinct是邪恶的。在您的情况下,可能会得到无法修复的重复数据。首先,您应该定义在您的情况下什么是重复记录,即所有列的组合。然后在where条件下使用相同的列
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM linked_server_current_database
EXCEPT
SELECT [CUSTOMER],[SO DATE],[SO NUMBER],[itemid],[PROMISED DATE],[PO #]
FROM current_database