我是否需要使用事务为以下插入过程提供所有或不提议?
INSERT INTO table1 ( column1 , column2)
SELECT col1, col2
FROM table2
期望table2的平均行数大约为150,目标数据库是ms sql server 2008 r2。
答案 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#。