类似于这样的sql语句,往table1表中插入查询到的结果集,假如查询到50条数据,前面25条数据都是插入到table1是OK的,第26条因为某个字段什么的不兼容出错了,这样的话前面25条插入的数据是存在的吗?
8 个解决方案
#1
应该是存在的 你可以去试试
#2
--批量插入一条有问题,就报错不执行了
declare @T table (id int,col varchar(1))
insert into @T
select 1,'a' union all
select 2,'b' union all
select 3,'c'
declare @M table (id varchar(4),col varchar(1))
insert into @M
select '4','e' union all
select '5','f' union all
select 'a','g'
insert into @T select * from @M
#3
declare @T table (id int,col varchar(1))
insert into @T
select 1,'a' union all
select 2,'b' union all
select 3,'c'
declare @M table (id varchar(4),col varchar(1))
insert into @M
select '4','e' union all
select '5','f' union all
select 'a','g'
--有一条错误,就整体报错,不执行
--insert into @T select * from @M
--如果是这样的话,前面的是执行的,出错后停止
insert into @T select '4','e' --成功
insert into @T select '5','f' --成功
insert into @T select 'a','g' --失败
select * from @T
#4
至于会不会回滚
看你是不是用的是显示事务
还是隐式的
即使显示放在一个事务也要看错误的严重级别
看你是不是用的是显示事务
还是隐式的
即使显示放在一个事务也要看错误的严重级别
#5
貌似看错了
#6
为了防止这样的问题 可以
set xact_abort ON
set xact_abort ON
#7
噢噢...我那是一条sql语句,查询到的结果集可能有几万条数据,就怕插入一半成功,一半失败。
按照各位大侠的意思就是说:只有当中出现一条报错的,那么整体就报错了? 前面插入OK也会撤销?
按照各位大侠的意思就是说:只有当中出现一条报错的,那么整体就报错了? 前面插入OK也会撤销?
#8
那建议你先SELECT执行下,看看查询出的结果有没有问题。如果没问题,你再INSERT INTO到另一张表比较好。
#1
应该是存在的 你可以去试试
#2
--批量插入一条有问题,就报错不执行了
declare @T table (id int,col varchar(1))
insert into @T
select 1,'a' union all
select 2,'b' union all
select 3,'c'
declare @M table (id varchar(4),col varchar(1))
insert into @M
select '4','e' union all
select '5','f' union all
select 'a','g'
insert into @T select * from @M
#3
declare @T table (id int,col varchar(1))
insert into @T
select 1,'a' union all
select 2,'b' union all
select 3,'c'
declare @M table (id varchar(4),col varchar(1))
insert into @M
select '4','e' union all
select '5','f' union all
select 'a','g'
--有一条错误,就整体报错,不执行
--insert into @T select * from @M
--如果是这样的话,前面的是执行的,出错后停止
insert into @T select '4','e' --成功
insert into @T select '5','f' --成功
insert into @T select 'a','g' --失败
select * from @T
#4
至于会不会回滚
看你是不是用的是显示事务
还是隐式的
即使显示放在一个事务也要看错误的严重级别
看你是不是用的是显示事务
还是隐式的
即使显示放在一个事务也要看错误的严重级别
#5
貌似看错了
#6
为了防止这样的问题 可以
set xact_abort ON
set xact_abort ON
#7
噢噢...我那是一条sql语句,查询到的结果集可能有几万条数据,就怕插入一半成功,一半失败。
按照各位大侠的意思就是说:只有当中出现一条报错的,那么整体就报错了? 前面插入OK也会撤销?
按照各位大侠的意思就是说:只有当中出现一条报错的,那么整体就报错了? 前面插入OK也会撤销?
#8
那建议你先SELECT执行下,看看查询出的结果有没有问题。如果没问题,你再INSERT INTO到另一张表比较好。