Khan Sameer Ответов: 3

Как получить max в SQL server 2008 с помощью ASP .NET


Как получить максимальное количество в sql server 2008 с помощью asp .net и по крайней мере заблокировать его так, чтобы в то же время другой пользователь не мог получить максимальное количество из той же таблицы

Что я уже пробовал:

Select Max(Column) as  test From Table

Herman<T>.Instance

Что вы подразумеваете под удалением? Вы вызываете функцию!


вы можете обнаружить, что значение количества строк в таблицах системы :
выберите t.название, С. строки из представления sys.столы как Т
Присоединяйтесь к sys.partitions как p
ON t.[object_id] = p.[object_id]
Где именно t.name = '<ваше имя таблицы здесь>'

Herman&lt;T&gt;.Instance

Поскольку вы изменили свой вопрос, теперь ясно, в чем ваша проблема. Вы пытаетесь установить уникальный идентификатор в таблице базы данных. Установите поле идентификатора als Identity field. Чем БД будет передавать уникальные идентификаторы и ваш ASP.NET не нужно делать непонятные вещи.

3 Ответов

Рейтинг:
2

OriginalGriff

Похоже, вы планируете использовать это для создания чего - то вроде идентификатора-это очень плохая идея. Никогда не пытайтесь "предварительно назначить" значения идентификаторов, это всегда приводит к проблемам в производстве, которые чрезвычайно трудно решить, и еще труднее отменить, как только ваша база данных потеряет целостность в результате.

Используйте поле идентификации, если вам нужны почти последовательные идентификаторы, или уникальные поля идентификации, если вы хотите предварительно назначить их. Таким образом, система позаботится об "уникальности" ценностей, и вам не придется беспокоиться.


Рейтинг:
2

Patrice T

Цитата:
Как получить максимальное количество в sql server 2008 с помощью asp .net и по крайней мере заблокировать его так, чтобы в то же время другой пользователь не мог получить максимальное количество из той же таблицы

Вы на неверном пути.
SQL server построен с учетом многопользовательского режима, поэтому он снабжен инструментами для придания записям уникального идентификатора.
Просто объявите id как автоинкремент:
SQL автоматическое увеличение поля[^]


Рейтинг:
1

CHill60

Это звучит так, как будто вы хотите эксклюзивную блокировку на столе, пока вы получаете max - вы не можете запретить другому пользователю запускать функцию Max специально (насколько я знаю).

Чтобы получить эксклюзивный замок используйте

SELECT 1 from [Table] WITH (TABLOCKX)
SELECT MAX([Column]) as test from [Table]
Но не то чтобы другие пользователи все еще могли запрашивать таблицу с помощью WITH (NOLOCK) или SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

[EDIT] - я только что видел комментарий от Digimanus. Не пытайтесь использовать Max для создания уникального идентификатора. Использовать Идентичность[^] столбец или uniqueidentifier[^]