Как Вы блокируете таблицы в SQL Server 2005, и я должен даже сделать это?

Вы можете использовать следующее:

mydiv.style.display === 'block' = (mydiv.style.display === 'block' ? 'none' : 'block');

13
задан Tom H 13 July 2010 в 14:32
поделиться

6 ответов

Что-то вроде этого

--Grab the next message id
begin tran
declare @MessageId uniqueidentifier
select top 1 @MessageId =   ActionMessageId from UnacknowledgedDemands with(holdlock, updlock);

--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId

-- some error checking
commit tran

--Select the entire message
...
...
7
ответ дан 2 December 2019 в 01:22
поделиться

@Kilhoffer:

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

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

1
ответ дан 2 December 2019 в 01:22
поделиться

Вместо явной блокировки, которая часто наращивается SQL Server к более высокой гранулярности, чем желаемый, почему не только пробуют этот подход:

declare @MessageId uniqueidentifier
select top 1 @MessageId = ActionMessageId from UnacknowledgedDemands

update ActionMessages
  set AcknowledgedTime = getdate()
  where ActionMessageId = @MessageId and AcknowledgedTime is null

if @@rowcount > 0
  /* acknoweldge succeeded */
else
  /* concurrent query acknowledged message before us,
     go back and try another one */

, Чем меньше Вы блокируете - тем более высокий параллелизм Вы имеете.

1
ответ дан 2 December 2019 в 01:22
поделиться

Необходимо ли действительно обрабатывать вещи один за другим? У Вас не должно только быть SQL Server, подтверждают все неподтвержденные сообщения с сегодняшней датой и возвращают их? (все также в транзакции, конечно)

0
ответ дан 2 December 2019 в 01:22
поделиться

Считайте больше о Выборе SQL Server Блокировку здесь и здесь . SQL Server имеет способность вызвать блокировку таблицы на выбор. Ничего не произойдет с таблицей во время транзакции. Когда транзакция завершается, любой вставляет, или обновления тогда разрешат себя.

0
ответ дан 2 December 2019 в 01:22
поделиться

Вы хотите обернуть свой код в транзакцию, тогда SQL-сервер обработает блокировку соответствующих строк или таблиц.

begin transaction

--Grab the next message id
declare @MessageId uniqueidentifier
set @MessageId = (select top(1) ActionMessageId from UnacknowledgedDemands);

--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId

commit transaction

--Select the entire message
...
-1
ответ дан 2 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: