2015-12-01 13 views
7

Ich habe ein Visual Studio-Datenbank-Projekt (DACPAC), die eine Reihe von SQL-Sequenzen enthält. Wenn ich den DACPAC ausliege, setzt er den Sequenzwert immer auf den Standardwert zurück, der im Create-Skript enthalten ist (in diesem Fall 1). z.B.DACPAC und SQL-Sequenz

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

Kann jemand einen Weg vorschlagen, entweder die DACPAC Anweisen die Sequenz Startwert, oder eine Art, die DACPAC zu ignorieren den richtigen Wert als nach der Bereitstellung Schritt vielleicht wiederherstellen?

Vielen Dank im Voraus

Antwort

6

Dies ist ein bekanntes Problem mit Sequenzen bei der Verwendung der SSDT-Tool. Es gibt ein paar Lösungen.

  1. Ignorieren Sequenz-Objekte bei der Veröffentlichung.
  2. Verwenden Sie einen benutzerdefinierten Bereitstellungsfilter, um den Startwert zu ignorieren.
  3. Verwenden Sie sp_sequence_get_range anstelle von RESTART WITH, um den Zähler nach der Bereitstellung zu erhöhen.

1. Sequenz ignorieren Objekte, wenn

Veröffentlichung Dies ist die einfachste Möglichkeit, aber die meisten umständlich, wie es heißt, Sie müssen manuell Sequenzen bereitstellen. Fügen Sie den folgenden Code zu Ihrem Profil veröffentlichen

<ExcludeSequences>True</ExcludeSequences> 

Oder von der Kommandozeile

/p:ExcludeObjectType=Sequences 

2. Verwenden Sie einen benutzerdefinierten Bereitstellungs Filter

Erster Download AgileSqlClub's Deployment-Filter. Dann folgendes Bereitstellungsprofil hinzufügen:

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

Oder von der Kommandozeile:

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

3. Verwenden sp_sequence_get_range

Hierzu statt RESTART WITH auf die Verwendung von Produktionsserver, um den Startwert zu ändern, verwenden Sie:

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

Auf diese Weise entspricht der Startwert immer dem erwarteten Wert aus dem Bereitstellungsskript.


Ressourcen

Verwandte Themen