是插入.. select语句事务?

时间:2014-05-31 02:25:04

标签: sql sql-server tsql transactions

我是否需要使用事务为以下插入过程提供所有或不提议?

INSERT INTO table1 ( column1 , column2)
SELECT  col1, col2
FROM    table2  

期望table2的平均行数大约为150,目标数据库是ms sql server 2008 r2。

2 个答案:

答案 0 :(得分:2)

不,你不需要。默认情况下,单个SQL语句已在事务中,因此您无法部分插入结果,或者同时由另一个事务调节结果。涉及2个表的事实并没有改变使用单个SQL语句的事实。

答案 1 :(得分:0)

因为您不需要简单的插入。 默认情况下,sqlserver管理此事,并在最后提交您所做的任何事情。

如果您明确要求执行插入/更新的多个语句,或者您希望在单个工作单元中插入父/子,那么您将使用事务作为

tran
declare @parentId int =0;
insert statement ---parent

set @parentId= @@identity

insert statement --child entry
values ( @parentId,...)

If @@ERROR  > 0 then
ROLLBACK
else 
COMMIT

http://www.codeproject.com/Articles/4451/SQL-Server-Transactions-and-Error-Handling

或者你也可以在sqlserver端使用try catch block作为c#。

http://msdn.microsoft.com/en-IN/library/ms175976.aspx