Да.
Для SQL Server по умолчанию используется режим auto-commit .Без явной транзакции каждый отдельный оператор будет зафиксирован после его выполнения.Точно так же, как если бы вы выполняли строку SQL в SSMS.
Вот пример для демонстрации.Он выполняет три оператора UPDATE подряд (намеренно вызывая ошибку для второго).Без транзакции первое и последнее ОБНОВЛЕНИЕ завершаются успешно, но средняя откатывается.Таким образом, если все три оператора должны обрабатываться как единое целое, вы должны использовать cftransaction.
До:
![Image of data before queries](https://i.stack.imgur.com/Ngdqz.png)
После:
![Image of data after queries, without a transaction](https://i.stack.imgur.com/oHfUr.png)
DDL / данные выборки:
CREATE TABLE SomeTable ( Id INT, Col VARCHAR(50) )
INSERT INTO SomeTable
VALUES (1,'Original'),(2,'Original'),(3,'Original')
CF
<cfscript>
before = QueryExecute(" SELECT * FROM SomeTable");
writeDump( before );
// DEMO: Deliberately omits cftransaction and causes error
try {
QueryExecute(" UPDATE SomeTable SET Col = 'Changed' WHERE Id = 1
UPDATE SomeTable SET Col = 'Changed' WHERE Id = 2 AND Id = 1 / 0
UPDATE SomeTable SET Col = 'Changed' WHERE Id = 3
");
}
catch( any e) {
writeDump( e );
}
after = QueryExecute(" SELECT * FROM SomeTable");
writeDump( after );
</cfscript>