Member 12183079 Ответов: 1

Как увеличить значение


Declare @UID varchar(30)
Declare @UserId varchar(30)
Set @UID='0'
Set @UID= @UserId
SET @UserId = @UID+1;
Select @UserId as u


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

я хочу знать, как делать при каждом увеличении значения execute

любить
1
2
3
я не хочу, чтобы использовать идентичность я хочу, чтобы этот запрос через приращения
так что, пожалуйста, помогите мне

PIEBALDconsult

Если Oracle или последняя версия SQL Server, используйте последовательность.

1 Ответов

Рейтинг:
6

OriginalGriff

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

Использование IDENTITY означает, что SQL работает за вас и обрабатывает все многопользовательские вещи прозрачно за кулисами.

И вы никогда не должны выбирать "следующее значение", потому что оно может быть недействительным, когда пользователь вставляет строку - предварительный выбор идентификаторов-это опасная вещь, и вы действительно можете испортить свою БД, если не будете очень-очень осторожны.


Member 12183079

не могли бы вы пожалуйста без использования identity как сделать инкремент так что пожалуйста помогите

Dave Kreskowiak

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

Это включает в себя блокировку всей таблицы. Это означает, что только один пользователь может делать что-либо с таблицей одновременно, включая запуск SELECT на ней. Пока таблица заблокирована для этого обновления, никто другой не может ее прочитать!

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

PIEBALDconsult

Идентичность-это грязь. Никогда не используйте их.
С тех пор Microsoft научилась у Oracle и дала нам последовательности.