2015-12-01 16 views
7

私はいくつかのSQLシーケンスを含むVisual Studioデータベースプロジェクト(DACPAC)を持っています。ただし、DACPACを展開すると、シーケンス値がCreateスクリプト(この場合は1)に含まれるデフォルト値にリセットされます。例えばDACPACとSQLシーケンス

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

誰もがシーケンス開始値、または多分展開後のステップとして正しい値を復元するためにDACPACを取得するいくつかの方法を無視するDACPACを指示するのいずれかの方法を提案することはできますか?

ありがとうございます。

答えて

6

シーケンスでSSDTツールを使用する場合の既知の問題です。いくつかの解決策があります。

  1. 公開時にシーケンスオブジェクトを無視します。
  2. カスタム展開フィルタを使用して、開始値を無視します。
  3. RESTART WITHの代わりにsp_sequence_get_rangeを使用して、ライブに展開した後にカウンタをインクリメントします。それはあなたが手動でシーケンスを展開しなければならないことを意味、これが最も簡単なオプションが、最も厄介である

    を公開する際のシーケンスを無視

1.オブジェクト。 コマンドライン

/p:ExcludeObjectType=Sequences 

2.カスタム展開フィルタ

まずダウンロードAgileSqlClub's展開フィルターから、あなたの公開プロフィール

<ExcludeSequences>True</ExcludeSequences> 

に以下を追加したり。

/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor 
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreName(Order_No_Seq)" 

3.代わりにRESTART WITHを使用して、このためにsp_sequence_get_range

:コマンドラインから、

<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors> 
<AdditionalDeploymentContributorArguments>SqlPackageFilter=IgnoreName(Order_No_Seq)</AdditionalDeploymentContributorArguments> 

または: は、その後、あなたのデプロイメント・プロファイルに以下を追加します運用サーバーは、開始値を変更するには、

DECLARE @range_first_value SQL_VARIANT; 
EXEC sp_sequence_get_range 
    @sequence_name = 'MySequence', 
    @range_size = 1000, 
    @range_first_value = @range_first_value OUTPUT; 

このようにして、開始値は常にデプロイメントスクリプトの期待値と一致します。


リソース

関連する問題