Sql server 如果记录不存在,则插入到表中
由于某些原因,这给了我“无法将重复记录插入表”错误 奇怪的是,我做了这样的测试:Sql server 如果记录不存在,则插入到表中,sql-server,tsql,not-exists,Sql Server,Tsql,Not Exists,由于某些原因,这给了我“无法将重复记录插入表”错误 奇怪的是,我做了这样的测试: DECLARE @CreditDebitAdjustmentDetail TABLE ( CustomerID INT, AdjustmentReason VARCHAR(50) ) INSERT INTO @CreditDebitAdjustmentDetail (CustomerID, AdjustmentReason) V
DECLARE @CreditDebitAdjustmentDetail TABLE
(
CustomerID INT,
AdjustmentReason VARCHAR(50)
)
INSERT INTO @CreditDebitAdjustmentDetail
(CustomerID, AdjustmentReason)
VALUES (143, -- CustomerID - int
'024' -- AdjustmentReason - varchar(50)
)
INSERT INTO [DMS].[dbo].[Deductions]
(
CustomerID,
DeductionCode,
DeductionDescription
)
SELECT b.CustomerID,
b.AdjustmentReason,
b.AdjustmentReason
FROM @CreditDebitAdjustmentDetail b
WHERE NOT EXISTS ( SELECT 1
FROM [DMS].[dbo].[Deductions]
WHERE CustomerID = b.CustomerID
AND DeductionCode = b.AdjustmentReason )
并且它不会插入到表中,因为记录已经存在
我是不是遗漏了什么
编辑-我以为这样做已经修复了它,但我仍然得到相同的错误:
INSERT INTO [DMS].[dbo].[Deductions]
(
CustomerID,
DeductionCode,
DeductionDescription
)
SELECT a.CustomerID,
a.AdjustmentReason,
a.AdjustmentReason
FROM @CreditDebitAdjustmentDetail a
WHERE NOT EXISTS ( SELECT 1
FROM [DMS].[dbo].[Deductions] b
WHERE a.CustomerID = b.CustomerID
AND a.AdjustmentReason = b.DeductionCode )
我想出来了,DOH
关键词。。。明显的-_-
INSERT INTO [DMS].[dbo].[Deductions]
(
CustomerID,
DeductionCode,
DeductionDescription
)
SELECT DISTINCT
a.CustomerID,
ISNULL(a.AdjustmentReason, 'UNKNOWN'),
ISNULL(a.AdjustmentReason, 'UNKNOWN')
FROM @CreditDebitAdjustmentDetail a
WHERE NOT EXISTS ( SELECT 1
FROM [DMS].[dbo].[Deductions] b
WHERE a.CustomerID = b.CustomerID
AND CASE a.AdjustmentReason
WHEN NULL THEN 'UNKNOWN'
WHEN '' THEN 'UNKNOWN'
END = b.DeductionCode )
查看您的索引在
扣减
表或用于更新的表中显示客户ID
或扣减代码
为空
。允许一个NULL
,但不能有多个NULL
s。PK中有哪些列?扣减表上的CustomerID和DecretionCode=unique。我想我发现了问题。插入时CustomerID为NULL。我一弄明白就回来报到。
INSERT INTO [DMS].[dbo].[Deductions]
(
CustomerID,
DeductionCode,
DeductionDescription
)
SELECT DISTINCT
a.CustomerID,
ISNULL(a.AdjustmentReason, 'UNKNOWN'),
ISNULL(a.AdjustmentReason, 'UNKNOWN')
FROM @CreditDebitAdjustmentDetail a
WHERE NOT EXISTS ( SELECT 1
FROM [DMS].[dbo].[Deductions] b
WHERE a.CustomerID = b.CustomerID
AND CASE a.AdjustmentReason
WHEN NULL THEN 'UNKNOWN'
WHEN '' THEN 'UNKNOWN'
END = b.DeductionCode )