[SQL ] 交易时先Delete再Insert出现违反条件约束

楼主: Peruheru (还在想)   2016-03-01 15:12:33
数据库名称:MS SQL Server
数据库版本:2008
内容/问题描述:
数据库内有两张结构相近的表,而我要把资料从A表转到B表
A跟B表都有同样的UNIQUE Key:ID,型态是char(8)只存英数
因为中间操作很多,所以有使用交易避免只改一半的情况
然后B表的现存资料。全部都要删掉Delete以后才新增Insert进去
大概就像这样:
begin tran
Delete From B
Insert Into B (ID, Column1, Column2,...)
Select ID, Column1, Column2,...
From A
Where Not Exists(Select 1 From B Where ID = A.ID)
commit
语法中where的部分是避免写入重复资料,这段语法也会用在纯粹新增时(不先删除)
可是
在执行时就会产生错误说我违反条件约束插入同样的ID
但是我不是已经先全删了吗...
如果是不删除的话,这段语法反而不会失败
看起来像是因为交易中的暂时状态让该ID还占著在B里面的位置
所以才会认为该资料仍然存在?
请问有什么方法在依循目前流程的情况下成功插入资料呢?
谢谢各位
=============
刚发完就自己找到类似的问题
http://tinyurl.com/jc3luox
好像是不行的样子...
执意要做的话就只能取消条件约束了
作者: rockchangnew (rock)   2016-03-01 21:21:00
作者: futureisours (ccc)   2016-03-01 22:01:00
delete还没commit,资料表还有相同资料当然不能inser
作者: likesp999 (大肠杆菌)   2016-03-01 22:03:00
是不是前面删除还没commit,导致后来insert的key重复
作者: SeanBoog (施吉祥先生)   2016-03-03 00:36:00
建议你先把B复制成C 然后再分段commit试试
作者: streetbad (翊)   2016-03-03 02:11:00
或者建一个temp table 把新的B的内容都塞进去然后再commit delete与倒回去

Links booklink

Contact Us: admin [ a t ] ucptt.com