Как просмотреть ожидающие изменения в транзакции SQL? - PullRequest
2 голосов
/ 08 марта 2012

Работая над некоторыми функциями, которые обновляют мою базу данных, я писал несколько быстрых тестов, чтобы убедиться, что мои функции выполняются правильно.Когда приходит время обновить базу данных, я могу передать транзакцию функции, а затем зафиксировать ее:

user.Assignment("assignment value for some column in table", connection, transaction)
transaction.Commit()

Мне интересно, есть ли способ написать быстрый тест, который может подтвердить, что транзакциябудет действительно обновлять определенные строки перед фиксацией?

(псевдо-код)

user.Assignment("assignment value for some column in table", connection, transaction)
If Not transaction["SomeColumn"] = "Expected value for SomeColumn"
    assert("ColumnName was not going to be updated to the expected value!")
transaction.Rollback()

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Пока вы находитесь внутри соединения, вы можете просто запрашивать данные, как обычно; другие абоненты будут заблокированы, но у вас будет полный доступ к измененным данным.

Если вы используете TransactionScope, это означает, что вы можете просто использовать любую команду / соединение (к той же базе данных), пока это соединение создается внутри TransactionScope - оно автоматически подключится к транзакции (хотя и с использованием тот же экземпляр более эффективен - исключает риск перехода на DTC).

Если вы используете DbTransaction, вам придется использовать тот же экземпляр соединения, и не забудьте правильно установить .Transaction для любых команд, которые вы выполняете для соединения.

1 голос
/ 08 марта 2012

Вы можете проверить значения, выбрав их с помощью with (nolock) из SSMS.Если вы хотите просмотреть это из .NET, я думаю, вы можете изменить уровень изоляции и выполнить повторный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...