我有一个Visual Studio数据库项目(DACPAC),其中包含许多SQL序列.但是,当我部署DACPAC时,它总是将序列值重置为Create脚本中包含的默认值(在本例中为1).例如
CREATE SEQUENCE [dbo].[MySequence] AS INT START WITH 1 INCREMENT BY 1;
任何人都可以建议一种方法来指示DACPAC忽略序列起始值,或者某种方式让DACPAC恢复正确的值作为部署后的步骤吗?
提前致谢
当使用SSDT工具时,这是序列的已知问题.有几种解决方案.
发布时忽略序列对象.
使用自定义部署筛选器忽略起始值.
在部署到live之后使用sp_sequence_get_range
而不是RESTART WITH
增加计数器.
这是最简单的选项,但最尴尬,因为这意味着您必须手动部署序列.将以下内容添加到发布配置文件中
True
或者,从命令行
/p:ExcludeObjectType=Sequences
首先下载AgileSqlClub的部署过滤器.然后将以下内容添加到部署配置文件中:
AgileSqlClub.DeploymentFilterContributor SqlPackageFilter=IgnoreName(Order_No_Seq)
或者,从命令行:
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(Order_No_Seq)"
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;
这样,起始值将始终与部署脚本中的预期值匹配.
连接问题 - 这个链接已经死了
论坛帖子讨论了这个问题
sp_sequence_get_range的MSDN
用户语音/ Azure反馈问题 - 替换Connect问题 - 标记为计划2018-03-16