This is a known sequence issue when using SSDT tools. There are several solutions.
- Ignore sequence objects when publishing.
- Use your own deployment filter to ignore the initial value.
- Use
sp_sequence_get_range instead of RESTART WITH to increase the counter after it is deployed.
1. Ignore sequence objects when publishing
This is the easiest option, but the most inconvenient as it means you need to manually deploy the sequences. Add the following to your published profile:
<ExcludeSequences>True</ExcludeSequences>
Or from the command line
/p:ExcludeObjectType=Sequences
2. Use a special deployment filter
First download the AgileSqlClub deployment filter . Then add the following to the deployment profile:
<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors> <AdditionalDeploymentContributorArguments>SqlPackageFilter=IgnoreName(Order_No_Seq)</AdditionalDeploymentContributorArguments>
Or from the command line:
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(Order_No_Seq)"
3. Use sp_sequence_get_range
To do this, instead of using RESTART WITH on the production server to change the start value, use:
DECLARE @range_first_value SQL_VARIANT; EXEC sp_sequence_get_range @sequence_name = 'MySequence', @range_size = 1000, @range_first_value = @range_first_value OUTPUT;
That way, the initial value will always match the expected value from the script deployment.
Resources
Chris chilvers
source share