Последовательность DACPAC и SQL
У меня есть проект базы данных Visual Studio (DACPAC), который включает в себя несколько последовательностей SQL. Однако при развертывании DACPAC он всегда сбрасывает значение последовательности до значения по умолчанию, включенного в сценарий создания (в данном случае 1). например,
CREATE SEQUENCE [dbo].[MySequence]
AS INT
START WITH 1
INCREMENT BY 1;
может ли кто-нибудь предложить способ либо инструктировать DACPAC игнорировать начальное значение последовательности, либо каким-то образом заставить DACPAC восстановить правильное значение в качестве шага после развертывания?
спасибо заранее
1 ответов
это известная проблема с последовательностями при использовании инструментов SSDT. Есть несколько решений.
- игнорировать объекты последовательности при публикации.
- используйте настраиваемый фильтр развертывания, чтобы игнорировать начальное значение.
- использовать
sp_sequence_get_range
вместоRESTART WITH
для увеличения счетчика после развертывания в live.
1. Игнорировать объекты последовательности при публикации
это самый простой вариант, но самый неудобный а это означает, что вы должны вручную развернуть последовательности. Добавьте в свой профиль публикации
<ExcludeSequences>True</ExcludeSequences>
или из командной строки
/p:ExcludeObjectType=Sequences
2. Используйте настраиваемый фильтр развертывания
скачать AgileSqlClub фильтр развертывания. Затем добавьте в профиль развертывания следующее:
<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;
таким образом, начальное значение всегда будет соответствовать ожидаемому значению из сценария развертывания.
ресурсы
- подключиться вопрос - эта ссылка умерла
- форум сообщение обсуждение вопроса
- MSDN для sp_sequence_get_range
- пользователь Проблема с обратной связью Voice/Azure - заменяет проблему подключения, отмеченную как запланировано 2018-03-16