如果我执行一个删除表的过程,然后使用'SELECT INTO'重新创建它。
如果该程序在删除表后引发异常,是否会发生表丢弃?
答案 0 :(得分:0)
除非将它们包装在事务中,否则将删除表,因为每个语句都将被视为隐式事务。
下面是一些测试
create table t1
(
id int not null primary key
)
drop table t11
insert into t1
select 1 union all select 1
表t11将被删除,即使insert会引发异常..
又一个例子..
drop table orderstest
print 'dropped table'
waitfor delay '00:00:05'
select * into orderstest
from Orders
现在2秒后,杀死会话,你仍然可以看到订单被删除
我检查了select into
以外的其他一些陈述,我没有看到select into
表现不同的原因,即使你在一个存储过程中包装语句,这也适用。< / p>
如果您要回滚所有内容,请使用交易或更好地使用set xact_Abort on
答案 1 :(得分:0)
是的,丢弃的表格将会消失。我编写新主键时出现此问题。根据表格,它将所有数据保存到内存中的表变量,删除表格,使用新的pk创建新表格,然后加载数据。如果数据违反了新的pk,则语句失败,表变量被删除,留下一个新表,没有数据。
我的做法是创建名称略有不同的新表,加载数据,在语句中更改两个表名,然后在确认加载所有数据后,删除原始表。