Это известная проблема с последовательностями при использовании SSDT инструментов. Есть несколько решений.
- Игнорировать объекты последовательности при публикации.
- Используйте собственный фильтр развертывания, чтобы игнорировать начальное значение.
- Используйте
sp_sequence_get_range
вместо RESTART WITH
, чтобы увеличить счетчик после его развертывания.
1. Игнорировать последовательность объектов при публикации
Это самый простой вариант, но наиболее неудобно, поскольку это означает, что вы должны вручную развернуть последовательности. Добавьте следующие строки в публикации профиля
<ExcludeSequences>True</ExcludeSequences>
Или из командной строки
/p:ExcludeObjectType=Sequences
2. Использование пользовательских фильтров развертывания
Сначала загрузите AgileSqlClub's фильтр развертывания. Затем добавьте следующую строку в ваш профиль развертывания:
<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors>
<AdditionalDeploymentContributorArguments>SqlPackageFilter=IgnoreName(Order_No_Seq)</AdditionalDeploymentContributorArguments>
Или из командной строки:
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(Order_No_Seq)"
3. Используйте sp_sequence_get_range
Для этого вместо использования RESTART WITH
на производственный сервер для изменения стартового значения, использование:
DECLARE @range_first_value SQL_VARIANT;
EXEC sp_sequence_get_range
@sequence_name = 'MySequence',
@range_size = 1000,
@range_first_value = @range_first_value OUTPUT;
Таким образом, начальное значение всегда будет соответствовать ожидаемому значению из сценария развертывания.
Ресурсы