Member 8010354 Ответов: 1

Как мне автоматически увеличить значение идентификатора


Привет,

У меня есть этот вопрос, но моя проблема все еще существует.

  public void AutoIncrementTaskID()
        {
            DatabaseConnection conn = this._dbcEH;
            string strComm =
                    string.Format(@"IF EXISTS(Select * from [DB].[Table] where ID Is NULL and [TempID] = @TempID)    
Begin
 UPDATE [DB].[Table] SET [ID]= (Select MAX(CAST(ISNULL(ID,0)as int))+1 from [DATABASENAME].[TABLE])  WHERE [TempID] =@TempID
End
");


Я понял, что ошибка приближается (выберите MAX (CAST(ISNULL(ID, 0) as int))+1. Может ли кто-нибудь попытаться решить эту проблему и дать мне знать? заранее спасибо за помощь.

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

Я попробовал настроить код, изменив cast, max и все остальное, но это не сработало.

PIEBALDconsult

Вы никогда не должны обновлять поле идентификатора, никогда.
Чего вы на самом деле пытаетесь достичь? Не "как", а "что"?

Member 8010354

Хорошо, на самом деле я создаю обработчик presaveevent с использованием API в веб-приложении (KCURA-Relativity). Поэтому я создал настроенное приложение в этом случае, и всякий раз, когда пользователь создает новую задачу (например, как регистрационную форму студента), она должна генерировать уникальное значение. В этот момент я взял SQL в картину.

PIEBALDconsult

Я предпочитаю GUID в качестве идентификаторов, но если вам нужно целое число, используйте последовательность.

Member 8010354

Не могли бы Вы уточнить, пожалуйста. Я ничего не понял.

1 Ответов

Рейтинг:
12

OriginalGriff

Не делай этого.
Вместо того, чтобы сделать ваше поле id поле Identity и SQL будет обрабатывать это для вас.
Проблема с вашим методом заключается в том, что он потерпит неудачу в производстве: как только два пользователя попытаются вставить новые строки одновременно, они потерпят неудачу, потому что ваш TempID не может быть продублирован! Или, если это возможно, это делает его еще хуже, потому что все строки с этим значением будут изменены...

SQL автоматическое увеличение поля[^]


Member 8010354

Хорошо, на самом деле я создаю обработчик presaveevent с использованием API в веб-приложении (KCURA-Relativity). Поэтому я создал настроенное приложение в этом случае, и всякий раз, когда пользователь создает новую задачу (например, как регистрационную форму студента), она должна генерировать уникальное значение. В этот момент я взял SQL в картину. В ссылке, на которую вы ссылались, это похоже на то, как при создании таблицы мы устанавливаем ее как значение автоматического приращения. как это использовать?

OriginalGriff

Правильно-вы устанавливаете его как поле идентификатора при создании БД, а затем, когда вы выполняете операцию вставки, SQL создаст для вас уникальное значение этого поля.
Вы можете объединить вставку с SELECT @@IDENTITY или SELECT IDENTITY_SCOPE (), чтобы вернуть созданное значение в ваше приложение, если оно вам нужно.