Проверка идентичности новой таблицы для модульных тестов базы данных - PullRequest
0 голосов
/ 17 сентября 2010

У меня есть набор модульных тестов базы данных, которые были созданы.Чтобы реплицировать все тесты на любой машине, на которой я развернут, существуют сценарии для удаления базы данных и ее воссоздания.Тест будет работать для всех модульных тестов, кроме первого теста.

Причина, по которой первый тест не пройден, заключается в том, что я выполняю команду "dbcc checkident" перед каждым тестом и сбрасываю все идентификаторы, чтобы убедиться, что все идентификаторы совпадают.В новой таблице, которая никогда не вставлялась в нее, а затем выполнялась «dbcc checkident», идентификация начинается с 0, когда вставляется вместо 1.

Если я использую некоторые другие встроенные команды для проверкиидентичность в новой таблице, они возвращают 0 в качестве идентичности.Преимущество проверки через «dbcc checkident» состоит в том, что идентификатор возвращается как «NULL», если в него никогда не вставлялась строка.Только «dbcc checkident» сообщает нам через печатное сообщение и не может быть легко протестирован.

Как я могу проверить, что мне нужно сбросить идентификацию или нет с помощью команд базы данных, не вставляя строку, удаляя ее, затем сбрасываяпросто чтобы избежать сброса идентификатора в первой записи?

Пример вставки в таблицу

Идентификация после вставки строки в свежую таблицу без запуск "dbcc checkident" и установка идентификатора на 0 = 1

Идентификация после вставки строки в свежую таблицу и запуск"dbcc checkident" и установка идентификации на 0 = 0

Идентичность после вставки строки в существующую таблицу , которая была вставлена ​​и запущена"dbcc checkident", и для идентификатора установлено значение 0 = 1

1 Ответ

1 голос
/ 17 сентября 2010

Чтобы обойти проблему вставки идентификатора с "dbcc checkident" на новой таблице, вот что я сделал.

Используя таблицы sys, я смог вручную проверить последнее значение идентификатора через sql. Если последний идентификатор был сброшен, он изменит последнее значение на 0. В новой таблице, которая никогда не вставлялась в последний идентификатор, будет нулевое значение.

Вот фрагмент кода, который мы использовали. Это позволит вам проверить последнюю личность, не делая вставки, удаления, сброса идентичности.

-- {0} is your table name
-- {1} is your identity value of the reset

IF EXISTS (SELECT null FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '{0}' AND           last_value IS NOT NULL) 
    DBCC CHECKIDENT ({0}, RESEED, {1});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...