2009-06-19 5 views
5

У нас есть несколько списков данных, которые извлекаются в нашем приложении через SqlCommand, выполняя запрос SELECT в базе данных SQL Server. Мы явно не устанавливаем транзакцию на SqlCommand, а просто передаем ей SqlConnection и запускаем ее. В случае, если транзакция не указана, что SQL Server будет инициировать и использовать транзакцию по умолчанию с значением IsolationLevel по умолчанию ReadCommitted?Выполнение SQLCommand без указания транзакции

ответ

3

SQL Server может работать без явной транзакции. Но да, я считаю, что это, по сути, чтение (если, конечно, вы не добавляете дополнительные подсказки к объектам запроса, например UPDLOCK/NOLOCK). Вы можете изучить этот вопрос с:

DBCC USEROPTIONS 

, который показывает (среди прочих):

isolation level read committed 
5

SQL создает транзакцию неявно для отчетности, и эта сделка совершается, когда завершает заявление. Уровень изоляции этой транзакции будет текущим уровнем изоляции, который по умолчанию соответствует READ COMMITTED. Некоторые операторы перезаписывают текущий уровень изоляции и обеспечивают выполнение READ COMMITTED (например, RECEIVE).

Если ваш SqlCommand выполняет пакет (больше операторов), то каждый оператор, который получает таблицы доступа, создает свою собственную транзакцию.

По умолчанию autocommit of transactions управляется путем изменения SET IMPLICIT_TRANSACTION ON.

Для получения более подробной информации см. Controlling Transactions.

+0

Возможно, у меня такая же проблема: http://stackoverflow.com/questions/41096727/is-there-an-implicit-transaction-in-sqlcommand-executenonquery – VansFannel

Смежные вопросы