【问题标题】:DACPAC and SQL SequenceDACPAC 和 SQL 序列
【发布时间】:2016-03-05 07:39:22
【问题描述】:

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

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

任何人都可以建议一种方法来指示 DACPAC 忽略序列起始值,或者让 DACPAC 恢复正确值作为部署后步骤的某种方法吗?

提前致谢

【问题讨论】:

    标签: sql-server visual-studio sql-server-data-tools dacpac sqlpackage


    【解决方案1】:

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

    1. 发布时忽略序列对象。
    2. 使用自定义部署过滤器忽略起始值。
    3. 使用 sp_sequence_get_range 而不是 RESTART WITH 在部署到 live 后递增计数器。

    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;
    

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


    资源

    【讨论】:

    • 我很困惑。使用 sp_sequence_get_range 代替 ALTER 和 RESTART WITH 有什么好处?
    • 自从我看到这个已经有一段时间了,但如果我没记错的话,RESTART WITH 会改变 START 值,这会导致 DPAC 稍后重置起始值(认为它改变了)。 sp_sequence_get range 只是像正常一样使用序列中的值,因此起始值保持不变。尽管您必须对其进行测试才能确认。
    【解决方案2】:

    有点晚了,但我也遇到过这个问题。让人头疼。

    我已向 Microsoft 提出请求:https://developercommunity.visualstudio.com/content/problem/732407/dacpac-resets-sequences.html

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

    这远非理想。

    【讨论】:

      猜你喜欢
      • 2013-01-15
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2019-03-15
      • 2015-09-02
      相关资源
      最近更新 更多