Erstellen von databaseskripts in SQL server Express

Ich generiere Änderungsskripts für meine database, um sie unter Quellcodeverwaltung zu halten, und eine seltsame Sache passiert jedes Mal:

Ich habe eine FlowFolder Tabelle und FlowFolder auf " Generate Scripts FlowFolder erstellt die folgenden zwei Skripts:

dbo.FlowFolder.Table.sql :

 USE [NC] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[FlowFolder]( [Id] [int] IDENTITY(1,1) NOT NULL, [ParentId] [dbo].[ParentId] NULL, [ParentType] [dbo].[CLRTypeName] NOT NULL, [Name] [dbo].[EntityName] NOT NULL, [Description] [dbo].[EntityDescription] NULL, [LastChanged] [int] NULL, CONSTRAINT [PK_FlowFolder] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO 

DF\_FlowFolder_LastChanged.Default.sql :

 USE [NC] GO ALTER TABLE [dbo].[FlowFolder] ADD CONSTRAINT [DF_FlowFolder_LastChanged] DEFAULT ((0)) FOR [LastChanged] GO 

Frage

  1. Warum produziert SQL server Express zwei fileen?
  2. Warum gibt es diese Einschränkung nicht als DEFAULT(0) -Attribut auf das Feld LastChanged in der CREATE TABLE statement?
  3. Wie kann ich SQL server erzwingen, ein konsolidiertes Skript für jede Änderung zu generieren, anstatt sie aufzuteilen?

BEARBEITEN:

Wie wir Skripte generieren. Zuerst war es eine einzige file. Aber leider hat SQLEXPRESS nicht die Reihenfolge der database-Entitäten aus speichern, um zu speichern. Das bedeutet, dass sogar eine kleine Änderung im Schema zu einem Skript führen könnte, das sich weit von dem Vorgänger unterscheidet. Das ist sehr unpraktisch, wenn man die Unterschiede in den Schemata vergleichen möchte. Daher haben wir einen anderen Ansatz angenommen. Wir generieren ein Skript pro databaseentität (nicht data, sondern Schemaentität, wie Tabelle, Benutzertyp usw.) und dann ein kleines Dienstprogramm anwenden, das den von SQLEXPRESS eingefügten Kommentar in jeder file mit dem date der Erzeugung entfernt. Danach ist deutlich sichtbar, welche Schema-Einheiten sich von Revision zu Revision geändert haben.

Abschließend müssen wir ein Skript pro Schema entity erzeugen.

Über die DEFAULT (0) Einschränkungen – wir brauchen sie wirklich nicht, um Beschränkungen genannt zu werden, also platziert sie auf die Spaltendefinition ist in Ordnung.

   
  1. Haben Sie "file pro object" auf dem Ausgabe-Optionsfeld des Assistenten ausgewählt?
  2. Weil Sie keine Beschränkungsnamen geben können, wenn sie in CREATE TABLE eingebettet sind
  3. Vergewissern Sie sich, dass "Single File" auf dem Ausgabe-Optionsfeld ausgewählt ist – oder versuchen Sie "Script to New Query Window"

Leider ist die function, die Sie suchen, nicht vorhanden.

Alle Einschränkungen sind Namen – auch unbenannte Einschränkungen sind Namen. SQL server verfolgt nicht, welche Namen es erstellt hat und welche Sie erstellt haben, also im Skriptgenerierungsprozess muss es sie abspalten.

Normalerweise ist es besser, diesen process in umgekehrter Weise zu verwalten. Mit anderen Worten, haben Sie eine Sammlung von Skript-fileen, die Sie zusammen kombinieren, um die DB zu erstellen. Auf diese Weise können Sie die Skriptdateien strukturiert haben, aber Sie wollen. Team System Data Edition macht das alles automatisch für Sie. Ein regelmäßiges DB-Projekt lässt Sie sie getrennt halten, aber es ist mehr Arbeit auf der Bereitstellungsseite.