【发布时间】:2012-04-02 09:47:41
【问题描述】:
我有以下查询
SELECT *
FROM T1 with (NOLOCK )
选择查询可以像用户 (I) 那样去任何地方。
我的应用程序脚本正在插入 1000 行数据并删除旧数据: 所有这些语句都在我的java代码中。插入是批量插入。
--我在这里设置了autocommit false
truncate table T1
insert into table T1 values(x,y,z)
truncate table T2
insert into table T2 values(x,y,z)...and other
--我在这里提交事务
但是在截断和插入完成之前,我不会从 T1 获取数据。怎么可能避免这种情况呢?
【问题讨论】:
-
请说明您在
TRUNCATE/INSERT序列中的哪个点执行SELECT。 -
@BarryKaye 我已经编辑了这可能现在很清楚了。
-
从我的测试插入不会产生问题,但会截断。如果您在
begin transaction之前移动它们,则选择返回到目前为止插入的记录。我会尽力寻找解释。 -
TRUNCATE在桌子上使用SCH-M锁定。这与架构稳定性锁不兼容,即使是SELECT和NOLOCK也需要。 -
@MartinSmith 那么这是否意味着我需要使用 Delete *
标签: java sql-server sql-server-2008