powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уникальные номера в таблице
3 сообщений из 3, страница 1 из 1
Уникальные номера в таблице
    #32068234
Kirill Krasnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за такой вопрос, но столкнулся с такой проблемой.
Имеется таблица, в которой хранится 1 запись. В этой записи, в разных полях хранятся счетчики на последний номер субъекта, обекта и т.п., а также usrid - char. При добавлении нового субъекта, оператор обновляет эту таблицу, вносит в usrid свой id (естественно, автоматически) берет нужное поле (субект) и считывает данные (перед этим он еще проверяет, его ли id внесен в usrid). При сохранении он сохраняет в id субъекта считанные данные, увеличинные на единицу. После этого затирает usrid " " и сохраняет в поле субекта только что введенный id субекта.
Другие же пользователи на проверки пустоты поля usrid в таблице бегают по циклу пока usrid не станет пустым.
По каким-то непонятным причинам иногда пользователь выходя не затирает правильно usrid и пока ручками этого не исправишь все висят в очереди.
Когда работали с таблицами FoxPro, то там есть LOCK и UNLOCK таблицы и этого было достаточно, чтобы к таблице мог достучаться только один человек. Но как это можно проще реализовать на MS SQL Server'е?
...
Рейтинг: 0 / 0
Уникальные номера в таблице
    #32068243
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что по этому поводу говорят на SQL Tips at Builder.com
Specify locking with sp_indexoption

The system procedure, sp_indexoption, is used to turn off or on
page-level and/or row-level locking. Under normal operation, SQL Server
automatically makes choices of page-, row-, or table-level locking. It is not
necessary to set these options manually. However, sp_indexoption is
provided for expert users who know with certainty that a particular type of
lock is always appropriate.

The system procedure takes three parameters. The first parameter,
@IndexNamePattern, is a qualified index or table name. If only the table
name is used and not the qualified index name, all indexes are affected.

The second parameter, @OptionName, can be one of the following four
options:

AllowRowLocks
DisAllowRowLocks
AllowPageLocks
DisAllowPageLocks

The third parameter, @OptionValue, specifies whether the setting is:

Enabled--True, On, 1
Disabled--False, Off, 0

You can use the metadata function, INDEXPROPERTY, to find if the
options of sp_indexoption system procedure have been set. Following is
sample script to illustrate the use of this function:


USE NorthWind
GO
-- 0=Page locking is allowed.
SELECT INDEXPROPERTY (
OBJECT_ID('Orders'),'PK_Orders','IsPageLockDisallowed')
-- 0=Row locking is allowed.
SELECT INDEXPROPERTY
(OBJECT_ID('Orders'),'PK_Orders','IsRowLockDisallowed')
GO


Please use the sp_indexoption system procedure with caution. You can
disallow the more granular locking mechanisms on a database causing the
locks to escalate to less granular locking mechanisms as in page-level and
table-level locking. Depending on the size of the table and type of
processing on the table, this could cause significant blocking within the
database.

Following is a sample script used to demonstrate the use of the
sp_indexoption:


USE NorthWind
GO
SET NOCOUNT ON
GO
EXEC sp_indexoption @IndexNamePattern = 'Orders', @OptionName =
'AllowRowLocks', @OptionValue = 'no'
GO
SELECT 'Orders',
CASE
INDEXPROPERTY
(OBJECT_ID('Orders'),'CustomerID','IsRowLockDisallowed')
WHEN 1 THEN 'Cannot Row Lock '
WHEN 0 THEN 'Can Row Lock '
ELSE 'Unknown'
END 'RowLock',
CASE
INDEXPROPERTY
(OBJECT_ID('Orders'),'PK_Orders','IsRowLockDisallowed')
WHEN 1 THEN 'Cannot Row Lock '
WHEN 0 THEN 'Can Row Lock '
ELSE 'Unknown'
END 'RowLock'
GO
EXEC sp_indexoption @IndexNamePattern = 'Orders.CustomerID',
@OptionName = 'AllowRowLocks', @OptionValue = 'yes'
GO
SELECT 'Orders',
CASE
INDEXPROPERTY
(OBJECT_ID('Orders'),'CustomerID','IsRowLockDisallowed')
WHEN 1 THEN 'Cannot Row Lock '
WHEN 0 THEN 'Can Row Lock '
ELSE 'Unknown'
END 'RowLock',
CASE
INDEXPROPERTY
(OBJECT_ID('Orders'),'PK_Orders','IsRowLockDisallowed')
WHEN 1 THEN 'Cannot Row Lock '
WHEN 0 THEN 'Can Row Lock '
ELSE 'Unknown'
END 'RowLock'
GO
...
Рейтинг: 0 / 0
Уникальные номера в таблице
    #32068255
Kirill Krasnov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, сейчас поразбираюсь.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уникальные номера в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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