Добавление ограничения к скрипту хранимой процедуры SQL Server

Как я могу добавить к этим 2 скриптам ниже ограничение, чтобы он не позволял создавать героя с менее чем 3 символами в его имени или при изменении имени героя он также не позволял использовать менее 3 символов?

В настоящее время каждый может создать героя с именем: 1 или изменить свое имя .. в основном доступны все возможные варианты. Я хочу ограничить его именем минимум из 3 символов.

Я использую Microsoft SQL Server 2005/64 бит

Будет высоко оценен.

С уважением.


person NMALKO    schedule 12.05.2013    source источник
comment
Какую систему баз данных вы используете?   -  person Aleksandr Fedorenko    schedule 12.05.2013
comment
Microsoft SQL Server 2005... Извините, я забыл упомянуть об этом в своем первом сообщении.   -  person NMALKO    schedule 12.05.2013


Ответы (1)


В начале процедуры CREATE_NEW_CHAR вы могли бы сделать это...

IF LEN(LTRIM(@CharID)) < 3  -- LEN() does an RTRIM()
BEGIN
  SET @nRet = 7
  RETURN
END

То же самое в процедуре CHANGE_NEW_ID, но вместо нее используйте IF LEN(LTRIM(@NewCharID)) < 3.

Вызывающее приложение, вероятно, уже проверяет значение @nRet после выполнения процедуры. Надеюсь, он выдаст общее сообщение об ошибке, если @nRet!=0. Но вы можете улучшить этот код, чтобы, если @nRet=7, он мог отображать конкретное сообщение об ошибке о том, что введенное имя слишком короткое.

Я также обновил Pastebin: CREATE_NEW_CHAR & CHANGE_NEW_ID

person davmos    schedule 12.05.2013
comment
Могу ли я использовать эти строки в своем сценарии, которые уже есть, или я должен добавить ту, которую вы предложили? ... SET @x = 1 и WHILE (@x <= LEN(@CharID)) ? - person NMALKO; 12.05.2013
comment
Я думаю, вы хотите проверить длину перед входом в цикл WHILE для проверки отдельных символов. - person davmos; 12.05.2013
comment
Неважно, где именно он будет делать проверку.. единственное, что имеет значение, это когда они вводят менее 3 символов и нажимают кнопку, чтобы создать героя, поэтому скрипт ограничит их и не создаст, пока они не используют 3 или более символов и не менее 3. Итак, наконец, не могли бы вы загрузить в pastebin оба отредактированных скрипта с ограничением, я был бы очень признателен, так как я не хочу что-то испортить .. потому что я не могу сделать резервную копию БД прямо сейчас и быть безопасно. Еще раз будет очень признателен. - person NMALKO; 12.05.2013
comment
Да, поэтому, если вы поместите указанное выше IF перед циклом WHILE, он немедленно выйдет из процедуры, когда имя окажется недостаточно длинным. Если вы хотите сообщить пользователю причину, по которой это не сработало, проверьте значение nRet. - person davmos; 12.05.2013
comment
Должен ли я удалить строку WHILE (@x <= LEN(@CharID)) из текущего скрипта? - person NMALKO; 12.05.2013
comment
Нет, изменение — это просто дополнение, а не модификация существующего кода. Позвольте мне посмотреть, смогу ли я обновить pastebin. - person davmos; 12.05.2013
comment
Да, есть возможность создать новую версию текущего опубликованного pastebin. - person NMALKO; 12.05.2013
comment
ОК, круто, раньше не использовал Pastebin, но да, это было легко ;-) ссылки добавлены в ответ. - person davmos; 12.05.2013
comment
Я получил сообщение об ошибке, вероятно, потому, что это был nRet без @ .. Я добавил его, и он успешно выполнился, верно? Сейчас проверю, работает ли. - person NMALKO; 12.05.2013
comment
ой да извините. фиксированный pastebin и ответ. - person davmos; 12.05.2013
comment
Я думаю, что это работает, и последнее, как я теперь смогу изменить сообщение nret? Потому что 5 и 7 для чего-то другого. Кроме того, эта проверка, которую вы предложили, ограничивает только символы менее 3 символов в имени, а не что-то другое, верно? - person NMALKO; 12.05.2013
comment
В таком случае... последнее, что мне интересно, почему мы должны использовать LTRIM или это необходимо? - person NMALKO; 12.05.2013
comment
Если параметр содержит начальные пробелы, они будут включены в вывод LEN(). Если вы хотите разрешить начальные пробелы в имени (сомневаюсь?) или уверены, что вызывающее приложение обрезает его, то вам это не нужно. - person davmos; 12.05.2013
comment
Для проверки @nRet, можете ли вы опубликовать код, который уже делает это? - person davmos; 12.05.2013
comment
Сделаю пост, так что в итоге LTRIM удалит эти начальные пробелы, потому что я точно не хочу их разрешать. - person NMALKO; 12.05.2013
comment
давайте продолжим это обсуждение в чате - person davmos; 12.05.2013