#sql-server #tsql
#sql-server #tsql
Вопрос:
Мой конкретный случай заключается в том, что я пишу модульный тест и хочу смоделировать ошибку для генератора последовательности, но я не могу найти никакой документации о том, что он делает, когда заканчивается.
Здесь, конечно, есть документация для ПОСЛЕДОВАТЕЛЬНОСТИ:
В нем очень красиво сказано все, кроме: что произойдет, если у меня закончится.
Рассмотрим случай, когда я устанавливаю для последовательности очень маленькое значение (1-10), и я «знаю», что оно никогда не превысит 10. За исключением того, что в коде есть ошибка, и он внезапно получает все до последнего … затем запрашивает еще один?
Гипотетический пример:
CREATE SEQUENCE [dbo].[MY_SEQUENCE]
AS [tinyint]
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10
NO CYCLE
CACHE
Внешний код запрашивает 11-ю последовательность.
SELECT NEXT VALUE FOR MY_SEQUENCE
Что происходит?
Комментарии:
1. Эмм … запустите ваш пример и убедитесь в этом сами?
2. Чего вы ожидаете.. Он выдаст ошибку, как только достигнет максимального значения.. Объект последовательности ‘MY_SEQUENCE’ достиг своего минимального или максимального значения. Перезапустите объект sequence, чтобы разрешить генерирование новых значений.
3. На самом деле вам потребовалось больше времени, чтобы ввести вопрос, чем нужно было бы просто запустить это и посмотреть, что произойдет.
4. У вас нет базы данных разработчиков, где вы могли бы поэкспериментировать с материалом? Вы также всегда можете использовать sql fiddle. sqlfiddle.com /#!18/f8dff
5. 1: купите ноутбук. 2. установите SQL Server Developer Edition. 3: прибыль.
Ответ №1:
В документации, которую вы упомянули, указано, что происходит: «[…] генерирует исключение при превышении его минимального или максимального значения»
Что касается сообщения об ошибке, вы можете узнать с помощью простого поиска в Google: https://www.google.com/search ?q = t-sql ошибка сообщения последовательность Четвертая ссылка https://www.sqlshack.com/sequence-objects-in-sql-server и там вы можете найти скриншот ошибки, которая имеет номер 11728.
Конечно, было бы проще попробовать это самостоятельно, используя один из методов, уже указанных в комментариях.