0

我注意到 MS SQL 可能在前一个事务完成(或提交)之前开始另一个事务。有没有一种方法可以确保交易必须在下一个交易开始之前首先完成?

我的问题是我想在 SQL INSERT 之后几乎立即执行 SQL SELECT。我现在看到的是;当 SELECT 语句运行时;它不会返回(非常)最近插入的数据。

当我使用 SQL 分析器跟踪此场景时,我注意到 SQL INSERT 和 SELECT 同时执行,因为 SELECT 发生在 INSERT 完成之前。

有没有办法解决我的这个问题?谢谢!

4

3 回答 3

1

从它的声音来看,您正在寻找OUTPUT子句

从文档http://msdn.microsoft.com/en-us/library/ms177564.aspx中的示例

DECLARE @MyTableVar table( NewScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());
于 2012-08-16T08:18:47.800 回答
0

您可以在SERIALIZABLE隔离级别运行事务。这样,您将确保在插入之后执行选择。在较低的隔离级别中,选择是并行执行的,并返回数据的快照——在发出选择的事务启动之前,所有事务都已完成,这是一种查看方式。

于 2012-08-16T08:13:19.110 回答
-1

我猜你想在插入后得到一个自动生成的标识符?我不确定执行此操作的 MSSQL 方式,但在 PostgreSQL 中,有 INSERT ... RETURNING 扩展来解决这个问题。

http://www.postgresql.org/docs/9.1/static/sql-insert.html

您是否被锁定在 MSSQL 中?

于 2012-08-14T23:19:34.613 回答