ALTER TABLE (SQL Server Compact)

Ändert die Definition einer Tabelle durch Ändern, Hinzufügen oder Löschen von Spalten und/oder Einschränkungen.

Syntax

ALTER TABLE table_name
    ALTER COLUMN column_name 
   {
    type_name[({precision[.scale]})][NULL|NOT NULL]
   {DROP DEFAULT 
   | SET DEFAULT constant_expression 
   | IDENTITY [ ( seed , increment ) ]
   } 
| ADD 
   { < column_definition > | < table_constraint > } [ ,...n ] 
| DROP 
   { [ CONSTRAINT ] constraint_name 
   | COLUMN column }
] }
< column_definition > ::= 
   { column_name data_type } 
   [ [ DEFAULT constant_expression ] 
      | IDENTITY [ ( seed , increment ) ] 
   ] 
   [ROWGUIDCOL]
   [ < column_constraint > ] [ ...n ] ]
< column_constraint > ::= 
   [ NULL | NOT NULL ] 
   [ CONSTRAINT constraint_name ] 
   { 
      | { PRIMARY KEY | UNIQUE } 
      | REFERENCES ref_table [ (ref_column) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
   }
< table_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ { PRIMARY KEY | UNIQUE } 
      { ( column [ ,...n ] ) } 
      | FOREIGN KEY 
        ( column [ ,...n ] )
        REFERENCES ref_table [ (ref_column [ ,...n ] ) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
   }

Argumente

  • table_name
    Der Name der zu ändernden Tabelle.

    Hinweis

    Ein Tabellenname muss den Regeln für Bezeichner entsprechen. Der für table_name angegebene Tabellenname muss innerhalb der Datenbank eindeutig sein. Der table_name darf maximal 128 Zeichen lang sein.

  • ALTER COLUMN
    Gibt die Spalte an, die geändert werden soll.

  • column_name
    Der Name einer Spalte der Tabelle. Jeder Spaltenname muss den Regeln für Bezeichner entsprechen und muss innerhalb der Tabelle eindeutig sein.

  • data_type
    Gibt den Datentyp der Spalte an. Informationen zu den Datentypen finden Sie unter Datentypen.

  • DEFAULT
    Gibt den Wert an, der für die Spalte bereitgestellt wird, wenn bei einer INSERT-Aktion kein Wert explizit angegeben ist. DEFAULT-Definitionen können auf jede Spalte angewendet werden. Davon ausgenommen sind lediglich Spalten, die durch die IDENTITY-Eigenschaft definiert sind. DEFAULT-Definitionen werden entfernt, wenn die Tabelle mit DROP TABLE gelöscht wird. Als Standardwert kann nur ein konstanter Werte verwendet werden (z. B. eine Zeichenfolge oder eine Datumsfunktion).

  • IDENTITY
    Zeigt an, dass die neue Spalte eine Identitätsspalte ist. Wenn der Tabelle eine neue Zeile hinzugefügt wird, stellt Microsoft SQL Server Compact einen inkrementellen Wert für die Spalte bereit. Identitätsspalten werden normalerweise zusammen mit der PRIMARY KEY-Einschränkung verwendet, damit sie als Zeilen-ID für die Tabelle fungieren. Die IDENTITY-Eigenschaft kann nur int-Spalten zugewiesen werden. Für jede Tabelle kann nur eine Identitätsspalte erstellt werden. Gebundene Standardwerte und DEFAULT-Einschränkungen können nicht mit einer Identitätsspalte verwendet werden. Sie müssen sowohl Ausgangswert als auch Inkrementwert oder keinen von beiden angeben. Wenn Sie keinen Wert angeben, ist der Standardwert (1,1).

  • seed
    Der Wert, der für die erste Zeile verwendet wird, die in die Tabelle geladen wird.

  • increment
    Der inkrementelle Wert, der zu dem Identitätswert der zuvor geladenen Zeile addiert wird.

  • ADD
    Gibt an, dass eine oder mehrere Spaltendefinitionen oder Tabelleneinschränkungen hinzugefügt werden.

  • DROP { [CONSTRAINT] constraint_name| COLUMN column_name}
    Gibt an, dass die Einschränkung constraint_name oder die Spalte column_name aus der Tabelle entfernt werden soll.

  • ROWGUIDCOL
    Zeigt an, dass die neue Spalte eine globale unique identifier-Spalte für die Zeilen ist. Für jede Tabelle kann nur eine uniqueidentifier-Spalte als ROWGUIDCOL-Spalte festgelegt werden. Die ROWGUIDCOL-Eigenschaft kann nur einer uniqueidentifier-Spalte zugewiesen werden.

    ROWGUIDCOL generiert automatisch Werte für neue Zeilen, die in die Tabelle eingefügt werden.

  • NULL | NOT NULL
    Schlüsselwörter, die angeben, ob in der Spalte NULL-Werte zulässig sind. NULL ist genau genommen keine Einschränkung, kann aber in derselben Weise angegeben werden wie NOT NULL.

  • CONSTRAINT
    Ein optionales Schlüsselwort, das den Anfang einer PRIMARY KEY-, UNIQUE- oder FOREIGN KEY-Einschränkung kennzeichnet. Einschränkungen sind besondere Eigenschaften, die Datenintegrität erzwingen und für die Tabelle sowie deren Spalten spezielle Arten von Indizes erstellen.

  • constraint_name
    Der Name einer Einschränkung. Dieser Name ist optional. Ist für constraint_name ein Name angegeben, muss er innerhalb der Datenbank eindeutig sein. Wenn für constraint_name kein Name angegeben ist, generiert SQL Server Compact einen Einschränkungsnamen.

  • PRIMARY KEY
    Eine Einschränkung, die einen eindeutigen Index dazu verwendet, die Entitätsintegrität für eine bestimmte Spalte oder für Spalten zu erzwingen. Für jede Tabelle kann nur eine PRIMARY KEY-Einschränkung erstellt werden.

  • UNIQUE
    Eine Einschränkung, die einen eindeutigen Index dazu verwendet, die Entitätsintegrität für eine bestimmte Spalte oder für Spalten bereitzustellen. Spalten in einer UNIQUE-Einschränkung können den Wert NULL aufweisen, aber nur ein NULL-Wert pro Spalte ist zulässig. Eine Tabelle kann mehrere UNIQUE-Einschränkungen haben.

    Hinweis

    SQL Server Compact kann Indizes verwenden, um PRIMARY KEY- und UNIQUE-Einschränkungen zu erzwingen. Es empfiehlt sich, dass Sie sich weder auf dieses Verhalten verlassen noch versuchen, irgendeinen Index zu ändern, der als Teil einer Einschränkung erstellt wurde.

  • FOREIGN KEY...REFERENCES
    Eine Einschränkung, die referenzielle Integrität für die Daten in der Spalte erreicht. Jede FOREIGN KEY-Einschränkung erfordert, dass jeder Wert in der angegebenen Spalte der Tabelle vorhanden ist, auf die verwiesen wird.

  • ref_table
    Der Name der Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.

  • ( ref_column [ ,... n] )
    Eine Spalte oder eine Liste aus Spalten der Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.

  • ON DELETE {CASCADE | NO ACTION |SET DEFAULT | SET NULL}
    Gibt an, welche Aktion für eine Zeile der zu erstellenden Tabelle ausgeführt wird, wenn diese Zeile eine referenzielle Beziehung hat, die Zeile, auf die verwiesen wird, aber aus der übergeordneten Tabelle gelöscht wurde. Der Standardwert ist NO ACTION. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten in diesem Thema.

  • ON UPDATE {CASCADE | NO ACTION | SET DEFAULT | SET NULL}
    Gibt an, welche Aktion für eine Zeile der zu erstellenden Tabelle ausgeführt wird, wenn diese Zeile eine referenzielle Beziehung hat, die Zeile, auf die verwiesen wird, aber in der übergeordneten Tabelle aktualisiert wurde. Der Standardwert ist NO ACTION. Weitere Informationen finden Sie im Abschnitt "Hinweise" weiter unten in diesem Thema.

  • column
    Eine in runden Klammern angegebene Spalte oder Liste aus Spalten, die in Tabelleneinschränkungen verwendet wird, um die in der Einschränkungsdefinition verwendeten Spalten anzugeben.

  • n
    Ein Platzhalter, der anzeigt, dass das vorherige Element n Mal wiederholt werden kann.

Hinweise

Ist für ON DELETE oder ON UPDATE die Option CASCADE angegeben, wird die Zeile in der verweisenden Tabelle aktualisiert, wenn die entsprechende Zeile, auf die verwiesen wird, in der übergeordneten Tabelle aktualisiert wurde. Wenn NO ACTION angegeben ist, gibt SQL Server Compact einen Fehler zurück, und es wird für die Aktualisierungsaktion der Zeile, auf die verwiesen wird, in der übergeordneten Tabelle ein Rollback ausgeführt.

Angenommen, in einer Datenbank gibt es die beiden Tabellen A und B. Tabelle A hat eine referenzielle Beziehung mit Tabelle B: Der A.ElementID-Fremdschlüssel verweist auf den B.ElementID-Primärschlüssel.

Wenn für eine Zeile der Tabelle B eine UPDATE-Anweisung ausgeführt wird und für A.ElementID eine ON UPDATE CASCADE-Aktion angegeben ist, prüft SQL Server Compact, ob es in Tabelle A abhängige Zeilen gibt. Werden abhängige Zeilen gefunden, werden diese in der Tabelle A so geändert wie die Zeile, auf die in Tabelle B verwiesen wird.

Ist dagegen NO ACTION angegeben, geht SQL Server Compact wie folgt vor: Es wird ein Fehler zurückgegeben, und in der Tabelle B wird für die Aktualisierungsaktion der Zeile, auf die verwiesen wird, ein Rollback ausgeführt, wenn es in der Tabelle A mindestens eine Zeile gibt, die auf die Zeile in Tabelle B verweist.

Codebeispiele

A. Ändern der Werte von seed und increment für die Identitätsspalte

Im folgenden Beispiel werden die Werte von seed und increment für die Identitätsspalte geändert.

CREATE TABLE MyCustomers (CustID INTEGER IDENTITY (100,1) PRIMARY KEY, CompanyName NvarChar (50));

INSERT INTO MyCustomers (CompanyName) VALUES ('A. Datum Corporation');

ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2);

B. Hinzufügen eines Standardwerts zu einer Spalte

Im folgenden Beispiel wird die CompanyName-Spalte so geändert, dass sie einen Standardwert hat.

ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'

C. Löschen des Standardwerts aus einer Spalte

Im folgenden Beispiel wird die CompanyName-Spalte so geändert, dass sie keinen Standardwert mehr hat.

ALTER TABLE MyCustomers ALTER COLUMN CompanyName DROP DEFAULT