SQL server-Transaktion und SELECT-statement

Ich habe oft gesehen, viele Leute verwenden SELECT statement innerhalb einer Transaktion. Ich verwende oft nur insert/update/delete nur in der Transaktion. Ich verstehe einfach nicht, dass was der Nutzen ist, eine SELECT statement innerhalb der Transaktion zu setzen.

Ich habe eine Antwort, dass …. SELECT innerhalb der Transaktion können Änderungen von anderen früheren Insert/Update/Delete statementen in dieser Transaktion, eine SELECT statement außerhalb der Transaktion nicht sehen können.

Über Aussage ist es wahr oder nicht?

Ist das der einzige Grund, warum die Leute SELECT statement in die Transaktion setzen? Bitte besprechen Sie den Grund im Detail, wenn möglich. Vielen Dank

Solutions Collecting From Web of "SQL server-Transaktion und SELECT-statement"

versuchen Sie dies zu tun und Sie werden verstehen:

Öffnen Sie zwei neue Abfragen auf SSMS (lass es A und B von nun an nennen) und auf A, erstellen Sie eine einfache Tabelle wie folgt:

 create table transTest(id int) insert into transTest values(1) 

nun folgendes:

select * from transTest in beiden aus. Sie sehen den Wert 1

Auf einem Lauf:

 set transaction isolation level read committed 

Auf B laufen:

 begin transaction insert into transTest values(2) 

Auf einem Lauf:

select * from transTest

Sie werden sehen, dass die Abfrage nicht beenden wird, weil sie durch die Transaktion auf A gesperrt ist

Auf B laufen:

 commit transaction 

Gehe zurück zu A und du wirst sehen, dass die Abfrage beendet ist

Wiederholen Sie den Test mit set transaction isolation level read uncommitted auf A Sie sehen, dass die Abfrage nicht durch die Transaktion gesperrt werden

Einer der Hauptgründe, die ich mir vorstellen kann (der einzige Grund, in der Tat) ist, wenn Sie eine andere Isolationsstufe setzen wollen, zB:

 USE AdventureWorks2008R2; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN TRANSACTION; SELECT * FROM HumanResources.EmployeePayHistory; SELECT * FROM HumanResources.Department; COMMIT TRANSACTION; 

Für einzelne SELECT-Aussagen bin ich aber nicht so sicher, es sei denn, du hast einen Grund, den anderen path zu gehen und READ UNCOMMITTED in Fällen zu setzen, in denen Reaktionszeit / Maximierung der Parallelität wichtiger ist als genaue oder gültige data.

<spekulationssicherheit = "75%"> Wenn die einzelne SELECT-statement innerhalb einer expliziten Transaktion ist, ohne die Isolationsstufen zu ändern, bin ich mir ziemlich sicher, dass überhaupt keine Wirkung haben wird. Einzelne Aussagen sind für sich selbst transactions, die automatisch begangen oder auf Fehler zurückgesetzt werden. </ speculation>