2016-05-15 12 views
0

Ich habe meine lokale SQL Server-Datenbank mithilfe des integrierten Migrationstools im SSMS 2016-Veröffentlichungskandidaten nach Azure migriert. Abgesehen von einigen fehlgeschlagenen Konvertierungen gespeicherter Prozeduren, die Funktionen verwenden, die in Azure nicht zulässig sind, sieht es OK aus.Generieren eines Skripts in SSMS 2016 RC für Azure-Datenbank lässt Standardwerte aus

Ich habe jetzt Skripte des Schemas von der lokalen und der Azure-Version der Datenbank generiert, die die gleichen Skriptoptionen verwenden, sodass ich die Skripts der Datenbanken vergleichen und Unterschiede oder andere fehlende Elemente identifizieren kann.

Mein Problem ist, dass das von Azure generierte Skript nicht die Vorgabewerteinschränkungen für Spalten enthält. Ein Blick auf die Tabellendefinitionen direkt in SSMS zeigt, dass die Standardwerte korrekt gesetzt wurden.

Kann mir jemand helfen, den SSMS-Skriptgenerator dazu zu bringen, die Vorgabewertbeschränkungen in das generierte Skript einzufügen?

Dies ist ein Beispiel-Skript aus der lokalen Datenbank:

SET ANSI_NULLS ON 
CREATE TABLE [xOrgBusinessType](
    [OrgID] [int] NOT NULL, 
    [BusTypeID] [int] NOT NULL, 
    [CRD] [datetime] NOT NULL CONSTRAINT [DF_xOrgBusinessType_CRD] DEFAULT (getutcdate()), 
    [CRDByID] [int] NOT NULL CONSTRAINT [DF_xOrgBusinessType_CRDByID] DEFAULT ((0)), 
CONSTRAINT [PK_xOrgBusinessType] PRIMARY KEY CLUSTERED 
(
    [OrgID] ASC, 
    [BusTypeID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) 

und die äquivalente Skript aus der Azure-Datenbank

SET ANSI_NULLS ON 
CREATE TABLE [xOrgBusinessType](
    [OrgID] [int] NOT NULL, 
    [BusTypeID] [int] NOT NULL, 
    [CRD] [datetime] NOT NULL, 
    [CRDByID] [int] NOT NULL, 
CONSTRAINT [PK_xOrgBusinessType] PRIMARY KEY CLUSTERED 
(
    [OrgID] ASC, 
    [BusTypeID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

Antwort

0

ich die Antwort auf meine eigene Frage gefunden zu haben. Ich habe einen Fehler gemacht, als ich die Skripte von den beiden Datenbanken verglichen habe. Das lokale Datenbankskript wurde von SSMS 2014 generiert, während das Azure-Datenbankskript von SSMS 2016 generiert wurde und die beiden Versionen CONSTRAINT .. DEFAULT .. unterschiedlich behandeln.

Im Fall von 2014 ist die Einschränkung mit der Spaltendefinition skripted. Im Fall von 2016 werden alle Einschränkungen in einem späteren Block als ALTER TABLE .. ADD CONSTRAINT ..-Befehle geschrieben.

Obwohl meine Frage beantwortet wird, scheint der SSMS 2016 Ansatz etwas bizarr. Im Fall des obigen Skripts befindet sich das Skript CREATE TABLE in der Zeile 2500, während das Script ALTER TABLE in der Zeile 13100 steht. Außerdem hatte ich die Option "Include deskriptive headers" gesetzt, aber den Anweisungen von ALTER TABLE wurde nicht vorangestellt ein Objektheader, obwohl dieser Teil des Skripts ein Constraint-Objekt definiert.

Ich frage mich, warum die ALTER TABLE-Anweisungen so weit von den Tabellendefinitionen entfernt sind. Es scheint keinen Grund zu geben, sie nicht direkt in das Skript CREATE TABLE aufzunehmen.