首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DACPAC和SQL序列

DACPAC和SQL序列
EN

Stack Overflow用户
提问于 2015-12-01 11:34:52
回答 2查看 2.9K关注 0票数 11

我有一个Visual数据库项目(DACPAC),它包含许多SQL序列。但是,当我部署DACPAC时,它总是将序列值重置为Create脚本中包含的默认值(在本例中是1)。例如:

代码语言:javascript
复制
CREATE SEQUENCE [dbo].[MySequence]
AS INT
START WITH 1
INCREMENT BY 1;

有人能建议一种方法来指示DACPAC忽略序列开始值,或者某种方式让DACPAC恢复正确的值作为部署后的步骤吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 12:19:01

在使用SSDT工具时,这是一个已知的序列问题。有几个解决方案。

  1. 发布时忽略序列对象。
  2. 使用自定义部署筛选器忽略起始值。
  3. 在部署到活动之后,使用sp_sequence_get_range而不是RESTART WITH来增加计数器。

1.在发布时忽略序列对象

这是最简单的选择,但也是最尴尬的,因为它意味着您必须手动部署序列。将以下内容添加到发布配置文件中

代码语言:javascript
复制
<ExcludeSequences>True</ExcludeSequences>

或者,从命令行

代码语言:javascript
复制
/p:ExcludeObjectType=Sequences

2.使用自定义部署筛选器

首先下载AgileSqlClub部署过滤器。然后将以下内容添加到部署配置文件中:

代码语言:javascript
复制
<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors>
<AdditionalDeploymentContributorArguments>SqlPackageFilter=IgnoreName(Order_No_Seq)</AdditionalDeploymentContributorArguments>

或者,从命令行:

代码语言:javascript
复制
/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(Order_No_Seq)"

3.使用sp_sequence_get_range

为此,不要在生产服务器上使用RESTART WITH来更改开始值,请使用:

代码语言:javascript
复制
DECLARE @range_first_value SQL_VARIANT;
EXEC sp_sequence_get_range
    @sequence_name = 'MySequence',
    @range_size = 1000,
    @range_first_value = @range_first_value OUTPUT;

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

资源

票数 12
EN

Stack Overflow用户

发布于 2019-09-12 08:10:29

有点迟了,但我也有这个问题。会引起很多头痛。

我向微软提出了一张罚单:https://developercommunity.visualstudio.com/content/problem/732407/dacpac-resets-sequences.html

我们当前的解决方法是在应用dacpac之前使用预部署脚本和部署后脚本捕获所有序列值,然后重新设置它们。

这远非理想。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34019442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档