0

MS SQLは、前のトランザクションが完了する(またはコミットされる)直前に別のトランザクションを開始する可能性があることに気付きました。次のトランザクションが始まる前に、トランザクションが最初に完了する必要があることを確認する方法はありますか?

私の問題は、SQLINSERTのほぼ直後にSQLSELECTを実行したいということです。私が今見ているのは、SELECTステートメントが実行されるとき。(非常に)最近挿入されたデータは返されません。

SQLプロファイラーを使用してこのシナリオをトレースすると、INSERTが完了する前にSELECTが発生するため、SQLINSERTとSELECTが同時に実行されることに気付きました。

私のこの問題を解決する方法はありますか?ありがとう!

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分離レベルで実行できます。このようにして、挿入後に選択が確実に実行されるようにします。より低い分離レベルでは、select は並行して実行され、データのスナップショットを返します。これは、select を発行するトランザクションが開始される前にすべてのトランザクションが完了したときに表示される方法です。

于 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 に答える