【发布时间】:2015-10-11 20:18:54
【问题描述】:
我有更新和插入大量数据的查询:
update [TableA]
set ColumnA1 = 'ValueA1'
DECLARE @MyCursor CURSOR;
DECLARE @MyField char(16);
BEGIN
SET @MyCursor = CURSOR FOR
select ColumnA1 from [TableA]
Where ColumnA2 = ValueA2
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM @MyCursor
INTO @MyField
Insert Into TableB(ColumnB1, ColumnB2, ColumnB3, ColumnB4, ColumnB5, ColumnB6)
Values(@MyField, ValueB1, ValueB2, ValueB3, ValueB4, ValueB5)
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
正如您所注意到的,我首先更新了 TableA,然后使用更新的 TableA 记录将一些日志信息插入到 TableB。我想以事务方式执行整个 sql 命令。我害怕使用begin transaction 会锁定整个 sql server 数据库。我已经在使用实体框架,但我不知道它如何在不锁定 sql server 的情况下处理此类命令。
【问题讨论】:
-
别害怕。开始事务不锁定整个 sql server 数据库。
标签: sql sql-server entity-framework