У меня есть страница classic ASP
и вы хотите установить transaction isolation level
в READ UNCOMMITTED
. Использование this documentation я придумал следующее:Как установить уровень изоляции транзакций с помощью классического ASP?
Set conn = GetConnection
conn.IsolationLevel = adXactReadUncommitted
'conn.BeginTrans
'conn.CommitTrans
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO [dbo].[A] ([IsolationLevel]) SELECT CASE transaction_isolation_level WHEN 0 THEN 'Unspecified' WHEN 1 THEN 'ReadUncommitted' WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable' WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL FROM sys.dm_exec_sessions where session_id = @@SPID"
Set rs = cmd.Execute()
response.write(conn.IsolationLevel)
Последние response.write
дает мне правильно 256
(READ UNCOMMITTED
), но когда я запрашиваю таблицу я получил только ReadCommitted
записи.
Может ли кто-нибудь сказать, что я делаю неправильно?
А вот тело функции GetConnection
:
FUNCTION GetConnection()
DIM strConnectionDotNet : strConnectionDotNet = "Data Source=..."
SET GetConnection = Server.CreateObject("adodb.connection")
GetConnection.connectionstring="Provider=sqloledb;" & strConnectionDotNet
GetConnection.open
END FUNCTION
Почему бы не переместить все ваши данные на хранимые процедуры? Это сделало бы это намного проще. Чем больше у меня вопрос, почему вы пытаетесь использовать read uncommitted из классического asp? Это, как правило, для OLTP-системы, и этот уровень изоляции, как правило, является плохой идеей для этого, поскольку он может и будет возвращать отсутствующие и/или повторяющиеся строки. –
Я не могу легко скомпоновать код в 'SQL object', так как оператор' t-sql' динамически строит страницы 'classic asp'. Для данного запроса для отображения таких данных (дублированные строки, фантомные чтения и т. Д.) Это нормально. – gotqn
Это очень скользкий наклон, когда вы начинаете создавать SQL-выражения в коде. Это заставляет меня дрожать. Вы можете добиться того же, добавив подсказку nolock в каждую таблицу в своем запросе. Слишком часто я вижу, что люди хотят использовать uncommitted, а затем путают, когда результаты неточны в произвольное время. –