Hej!! Tack Pelle! Standard beteendet för SQL Server är väl det att den bara rollbackar den operation som misslyckas om man inte stält in:Transaktioner i SQL Server
En liten fråga:
Om jag execverar följande i en stored procedure:
BEGIN TRAN
DELETE FROM Table1 WHERE Id = @Id
DELETE FROM Table2 WHERE Id = @Id
COMMIT
Vad händer om det blir fel i första DELETE satsen? Returnerar proceduren eller kommer även nästa DELETE sats att köras?
Nån som har koll?
Tack på förhand!
//KristofferSv: Transaktioner i SQL Server
Det var precis vad jag trodde!
Dock är det så att den kör den andra Delete stasen på min SQL Server 7.0. Jag installerade om den nyligen och innan dess har det fungerat så att den gör Rollback och returnerar.
Är det någon inställning i SQL Server som har ändrats eller vad kan ha hänt efter som det helt plötsligt inte fungerar så längre?
Visst är det väl så att om det blir fel på andra satsen "rullas" första tillbaka eller hur?
Tack på förhand!
//KristofferSv: Transaktioner i SQL Server
MSDN:
Starting Transactions
You can start transactions in Microsoft® SQL Server™ as explicit, autocommit, or implicit transactions.
Explicit transactions
Explicitly start a transaction by issuing a BEGIN TRANSACTION statement.
Autocommit transactions
This is the default mode for SQL Server. Each individual Transact-SQL statement is committed when it completes. You do not have to specify any statements to control transactions.
Implicit transactions
Set implicit transaction mode on through either an API function or the Transact-SQL SET IMPLICIT_TRANSACTIONS ON statement. The next statement automatically starts a new transaction. When that transaction is completed, the next Transact-SQL statement starts a new transaction.
Hade användning av SET XACT_ABORT när jag sökte beteendet du beskrev:
MSDN:
SET XACT_ABORT
Specifies whether Microsoft® SQL Server™ automatically rolls back the current transaction if a Transact-SQL statement raises a run-time error.
Syntax
SET XACT_ABORT { ON | OFF }
Remarks
When SET XACT_ABORT is ON, if a Transact-SQL statement raises a run-time error, the entire transaction is terminated and rolled back. When OFF, only the Transact-SQL statement that raised the error is rolled back and the transaction continues processing. Compile errors, such as syntax errors, are not affected by SET XACT_ABORT.
It is required that XACT_ABORT be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL Server. The only case where this option is not required is if the provider supports nested transactions. For more information, see Distributed Queries and Distributed Transactions.
The setting of SET XACT_ABORT is set at execute or run time and not at parse time.