我希望将临时表中的数据添加到另一个表中,但它给出了重复值错误。 我认为这是因为对于其他客户端可能具有相同的主键(statement_image_id是主键)或相同客户端的相同主键但具有不同的贷款号。
现在我该如何将这些数据添加到另一个表中。
我的临时表:
select top 0 * into #temptable from tab1
INSERT INTO #temptable ([STATEMENT_IMAGE_ID]
,[client_no]
,[LOAN_NO]
,[statement_date]
,[ACCRUED_LATE_CHARGES]
,[TOTAL_DUE])
SELECT msp.[STATEMENT_IMAGE_ID] --as msp_ID
,[client_no]
,[LOAN_NO]
,[statement_date]
,[ACCRUED_LATE_CHARGES]
,[TOTAL_DUE]
FROM tab1 si, tab2 msp
WHERE msp.[client_no] = si.[client_no] and msp.[loan_no] = si.[loan_no]
and msp.[statement_date] = si.[statement_date]
and msp.[statement_image_id] <> si.[statement_image_id]
这就是我尝试过的。
首先是提供重复错误,我认为不允许其他错误。
第一
insert into tab1 select * from #temptable
第二
insert into tab1 select * from #temptable
where tab1.[client_no] =#temptable.client_no
and tab1.[loan_no]= #temptable.[loan_no]
and tab1.[statement_date] = #temptable.[STATEMENT_DATE]
有什么建议吗?
答案 0 :(得分:0)
duplicate\null
列中不能包含primary key
个值。
你能做的一件事是,
更新tab1
中STATEMENT_IMAGE_ID
的相同tab1 and #temptable
值。{/ 1}
将数据插入tab1
,以获取STATEMENT_IMAGE_ID
中不同的tab1 and #temptable
值。
insert into tab1 (
select tmp.*
from #temptable tmp
join tab1 t on t.STATEMENT_IMAGE_ID != tmp.STATEMENT_IMAGE_ID
) as x
update tab1 t
join #temptable tmp on t.STATEMENT_IMAGE_ID == tmp.STATEMENT_IMAGE_ID
set
t.client_no = tmp.client_no,
t.LOAN_NO = tmp.LOAN_NO,
t.statement_date = tmp.statement_date,
t.ACCRUED_LATE_CHARGES = tmp.ACCRUED_LATE_CHARGES,
t.TOTAL_DUE = tmp.TOTAL_DUE;
注意:强>
如果其他任何列都有unique
constraint
,您也必须考虑这一点。
如果您无法丢失数据,请创建新的image_id
insert into tab1 (
select tmp.*
from #temptable tmp
join tab1 t on t.STATEMENT_IMAGE_ID != tmp.STATEMENT_IMAGE_ID
union all
select
UUID(),
tmp.client_no,
tmp.LOAN_NO,
tmp.statement_date,
tmp.ACCRUED_LATE_CHARGES,
tmp.TOTAL_DUE
from #temptable tmp
join tab1 t on t.STATEMENT_IMAGE_ID == tmp.STATEMENT_IMAGE_ID
) as x
注意:如果UUID()
是你的选择..其他some_new_id
。