powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с 70-229
6 сообщений из 6, страница 1 из 1
Вопрос с 70-229
    #32043004
soniko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня сдавал 70-229. Там был такой вопрос

You are a database developer for a clothing retailer. The company has a database named Sales. This database contains a table named Inventory. The Inventory table contains the list of items for sale and the quantity available for each of those items. When sales information is inserted into the database, this table is updated. The stored procedure that updates the inventory table is shown below:

CREATE PROCEDURE UpdateInventory @IntID int
AS
BEGIN

DECLARE @Count int

BEGIN TRAN

SELECT @Count = Available
FROM Inventory WITH (HOLDLOCK)
WHERE InventoryID = @IntID

IF (@Count > 0)
UPDATE Inventory SET Available = @Count – 1
WHERE InventoryID = @IntID

COMMIT TRAN

END

When this procedure executes, the database server occasionally returns the following error message:

Transaction (Process ID 53) was deadlock on {lock} resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

You need to prevent the error message from occurring while maintaining data integrity. What should you do?

A. Remove the table hint.
B. Change the table hint to UPDLOCK.
C. Change the table hint to REPEATABLEREAD.
D. Set the transaction isolation level to SERIALIZABLE.
E. Set the transaction isolation level to REPEATABLE READ.

Я выбрал B. Тем не менее, мне интересно кто какой ответ считает правильным и почему?
...
Рейтинг: 0 / 0
Вопрос с 70-229
    #32043006
sim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sim
Гость
абс верно
...
Рейтинг: 0 / 0
Вопрос с 70-229
    #32043012
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описание UPDLOCK из BOL:

UPDLOCK: Use update locks instead of shared locks while reading a table, and hold locks until the end of the statement or transaction. UPDLOCK has the advantage of allowing you to read data (without blocking other readers) and update it later with the assurance that the data has not changed since you last read it.


Очевидно, что это то, что нам нужно - прочитать данные из таблицы НИКОГО НЕ БЛОКИРУЯ, и сразу же заблокировать нужную часть таблицы НА ЗАПИСЬ пока вы не закончите update.
...
Рейтинг: 0 / 0
Вопрос с 70-229
    #32043134
Фотография Shura_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит прочитать НИКОГО НЕ БЛОКИРУЯ и одновременно заблокировать НА ЗАПИСЬ?
Если мы блокируем НА ЗАПИСЬ - разве это не значит что мы не хотим чтобы оттуда читали, пока мы не закончим запись.
...
Рейтинг: 0 / 0
Вопрос с 70-229
    #32043310
soniko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"...and hold locks until the end of the statement or transaction". В данном случае, интересно, блокировка будет только на время SELECT... или до COMMIT TRAN?
...
Рейтинг: 0 / 0
Вопрос с 70-229
    #32043326
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Do commit tran, конечно :-))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос с 70-229
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]