У меня возникла проблема с блокировкой таблицы SQL Server. Я развиваюсь на C#.INSERT в одной таблице, но она блокирует другую таблицу
Мои запросы выполняются под 1 транзакцией.
Я называю это самым простым способом распознавания. "setTransaction"
setTransaction предназначен для "INSERT/UPDATE/DELETE".
- если я хочу
SELECT
. Я буду использоватьSqlDataAdapter
. - Если я хочу сделать
INSERT
/UPDATE
илиDELETE
, пришло время использоватьsetTransaction
.
здесь таблица структура каждого ...
[LOG](
[log_id] [int] IDENTITY(1,1) NOT NULL,
[subject] [text] NOT NULL,
[query] [text] NOT NULL,
[log_datetime] [datetime] NOT NULL,
[user_id] [int] NOT NULL,
[emp_id] [int] NULL,
[old_value] [text] NULL
)
[RESERVATION_DETAIL](
[**reservation_detail_id**] [int] IDENTITY(1,1) NOT NULL,
[reservation_id] [int] NOT NULL,
[spa_program_id] [int] NULL,
[price] [int] NULL,
[oil] [int] NULL
)
[RESERVATION_THERAPIST](
[reservation_therapist_id] [int] IDENTITY(1,1) NOT NULL,
[**reservation_detail_id**] [int] NOT NULL,
[therapist_id] [int] NOT NULL,
[hours] [int] NULL,
[mins] [int] NULL
)
[LOG] работает независимо друг от друга. [RESERVATION_DETAIL] подключены к [RESERVATION_THERAPIST] с помощью reservation_detail_id
Проблема заключается в ....
- BEGIN TRANSACTION. Я хочу удалить запись из "RESERVATION_DETAIL" с reservation_detail_id = 25
Я выбрать запись из "RESERVATION_DETAIL" с reservation_detail_id = 25
SELECT * FROM RESERVATION_DETAIL WHERE RESERVATION_DETAIL_ID = 25
вставить в таблицу "LOG" с данными из 2.
ВСТАВИТЬ в журнал (при условии, запрос, log_datetime, идентификатор_пользователя, emp_id, old_value) ЗНАЧЕНИЯ ( 'DELETE TEMP запас из RES_DETAIL [RES_DETAIL_ID: 25]', 'DELETE FROM RESERVATION_DETAIL ГДЕ RESERVATION_DETAIL_ID = 25', CURRENT_TIMESTAMP, 1 , NULL, 'reservation_detail_id: 25 | reservation_id: 25 | spa_program_id: -1 | цена: | нефть:' )
теперь удалить из "RESERVATION_DETAIL", где reservation_detail_id = 25
Тогда я хочу для удаления записи из «R ESERVATION_THERAPIST "с reservation_detail_id = 25DELETE FROM WHERE RESERVATION_DETAIL RESERVATION_DETAIL_ID = 25
Я выбрать запись из" RESERVATION_THERAPIST "с reservation_detail_id = 25 < ----- Я ПОЛУЧИЛА ЗАМОК ЗДЕСЬ !!
SELECT * FROM RESERVATION_THERAPIST WHERE RESERVATION_DETAIL_ID = 25
вставить в таблицу "LOG" с данными из 5.
- Наконец я буду удалять из "RESERVATION_THERAPIST", где reservation_detaiil_id = 25
После этого были выполнены первые шаги. Шаг 5 (который находится около таблицы «RESERVATION_THERAPIST») теперь подождать на шаге 3 (около таблицы «LOG») до конца, но он так и не завершился.
Я не понимаю, почему я вставить в таблицу LOG но поставить замок на стол B!? или это не замок!
Перед тем, как это было сделано, возникли вопросы, которые вставляются в LOG без каких-либо проблем.
Теперь я могу решить свою проблему.
Запросы и шаги уже выполнены.
Но я забыл, что таблица «RESERVATION_DETAIL» имеет триггер, который будет запускаться сразу после запроса DELETE.
Таким образом, триггер будет автоматически удален, чтобы удалить запись в «RESERVATION_THERAPIST», и этот шаг находится под транзакцией.
Так "RESERVATION_THERAPIST" был заперт после "DELETE FROM RESERVATION_DETAIL", но прежде, чем я "SELECT * FROM RESERVATION_THERAPIST"
ПОЧЕМУ МЫ орать? – swasheck
Как насчет дать структуру таблицы в ваш пост и точный sql? –
Извините, что: P –