2015-12-01 6 views
7

У меня есть проект базы данных Visual Studio (DACPAC), который включает в себя ряд SQL-последовательностей. Однако при развертывании DACPAC он всегда сбрасывает значение последовательности до значения по умолчанию, включенного в скрипт Create (в данном случае 1). напримерDACPAC и SQL Sequence

CREATE SEQUENCE [dbo].[MySequence] 
AS INT 
START WITH 1 
INCREMENT BY 1; 

Может кто-нибудь предложить способ либо поручив DACPAC игнорировать начальное значение последовательности, или какой-то способ получения DACPAC восстановить правильное значение как шаг развертывания почтового, возможно?

Заранее спасибо

ответ

6

Это известная проблема с последовательностями при использовании SSDT инструментов. Есть несколько решений.

  1. Игнорировать объекты последовательности при публикации.
  2. Используйте собственный фильтр развертывания, чтобы игнорировать начальное значение.
  3. Используйте 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; 

Таким образом, начальное значение всегда будет соответствовать ожидаемому значению из сценария развертывания.


Ресурсы