Wie verwenden Sie BEGIN TRANSACTION mit der while-Schleife in SQL Server?
Wie zu verwenden BEGIN TRANSACTION
mit while-Schleife in SQL Server?
Diese Abfrage endet nie, vielleicht, weil es Stoppt und suchen COMMIT TRANSACTION
nach dem einfügen einer Zeile (wenn @cnt = 1
) aber ich will nicht COMMIT TRANSACTION
denn ich will Ergebnisse sehen, bevor Sie zu Begehen.
BEGIN TRANSACTION
DECLARE @cnt INT = 0;
WHILE @cnt <= 100
BEGIN
DECLARE @offset INT = 1
INSERT INTO totalSales (col1, col2)
SELECT
'Col1', ROW_NUMBER() OVER (ORDER BY col2) + @offset
FROM
sales
SET @cnt = @cnt + 1;
END;
So, wie ich überprüfen kann Ergebnis vor commit in der while-Schleife?
Wollen Sie sehen es in der gleichen batch-oder außerhalb der batch?
Ich möchte das Ergebnis sehen, bevor Sie zu Begehen im gleichen batch
was ist die Verwendung der while-Schleife hier?
Deine Schleife funktioniert einwandfrei, es läuft 100 mal, Sie gehen zu einfügen 100 * wie viele Datensätze sind in dieser Tabelle sales mit dieser Schleife.
Ich möchte das Ergebnis sehen, bevor Sie zu Begehen im gleichen batch
was ist die Verwendung der while-Schleife hier?
Deine Schleife funktioniert einwandfrei, es läuft 100 mal, Sie gehen zu einfügen 100 * wie viele Datensätze sind in dieser Tabelle sales mit dieser Schleife.
InformationsquelleAutor shaadi | 2017-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sagen, es endet nie es klingt für mich wie Sie immer sind einige blockieren gehen auf wegen, die Schleife läuft einfach gut.
https://www.mssqltips.com/sqlservertip/2429/how-to-identify-blocking-in-sql-server/
Empfehle ich mit Adam Machanic ' s sp_WhoIsActive für diese als gut: http://whoisactive.com
Sie müssen über die VIEW SERVER STATE-Berechtigungen. Er legt es alles in diesem doc: whoisactive.com/docs/04_installation
InformationsquelleAutor JM_
In der gleichen charge (innerhalb der gleichen Transaktion) können Sie einfach einen
SELECT
Befehl, um den aktualisierten Inhalt der Tabelle. Änderungen werden beibehalten, wenn dasCOMMIT TRANSACTION
Anweisung ausgeführt oder rückgängig gemacht, aufROLLBACK
.Beispiel: http://sqlfiddle.com/#!6/e4910/2
Alternativ können Sie die
INSERT INTO .. OUTPUT
konstruieren, um das Ergebnis derINSERT
- Anweisung.Docs: https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql
Außerhalb der batch - (verwenden Sie eine zweite Verbindung), können Sie
READ UNCOMMITTED
isolation-level, um der Lage sein zu Lesen, Datensätze nicht doch noch zugesagt.Docs: https://technet.microsoft.com/en-us/library/ms189122(v=sql.105).aspx
Ich möchte, um zu sehen, vollständige Ergebnis der while-Schleife vor der Begehung
Lokale Variablen sind nicht Teil einer Transaktion ist es daher Wert ist, nicht betroffen. Sie können immer ein Problem
SELECT
nach der Schleife, aber vor der übergabe.InformationsquelleAutor Pred
Sollten Sie eine
BEGIN TRAN
äußeren (allgemein), und im inneren Schleife beim erstellen einerBEGIN TRAN inner
(mit einem trans name).Im inneren Schleife, wenn die Bedingungen zu rollbacks nur für diese iteration benutze ich
SAVE TRAN
savepoint nicht verlieren Vorherige trans.Ich hab ein Beispiel erstellt, tests in der Schleife, während mit bedingten Einsätzen und rollback-savepoint:
Rückgabe von Zeilen: 1, 2, wenn die iteration selbst, und 3.
InformationsquelleAutor Joaquinglezsantos