加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – DACPAC和SQL序列

发布时间:2020-12-12 07:27:02 所属栏目:MsSql教程 来源:网络整理
导读:我有一个Visual Studio数据库项目(DACPAC),其中包含许多SQL序列.但是,当我部署DACPAC时,它总是将序列值重置为Create脚本中包含的默认值(在本例中为1).例如 CREATE SEQUENCE [dbo].[MySequence]AS INTSTART WITH 1INCREMENT BY 1; 任何人都可以建议一种方法来
我有一个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来递增计数器.

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;

这样,起始值将始终与部署脚本中的预期值匹配.

资源

> Connect issue – 这个链接已经死了
> Forum post discussing the issue
> MSDN for sp_sequence_get_range
> User Voice/Azure Feedback issue – 替换连接问题 – 标记为计划2018-03-16

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读