Benutzerdefinierte Tabellentypen

In SQL Server 2008 handelt es sich bei einem benutzerdefinierten Tabellentyp um einen benutzerdefinierten Typ, der die Definition einer Tabellenstruktur darstellt. Mit einem benutzerdefinierten Tabellentyp können Sie Tabellenwertparameter für gespeicherte Prozeduren oder Funktionen deklarieren oder Tabellenvariablen deklarieren, die in einem Stapel oder im Textteil einer gespeicherten Prozedur oder Funktion verwendet werden sollen. Weitere Informationen zum Definieren einer Tabellenstruktur finden Sie unter CREATE TABLE (Transact-SQL).

Verwenden Sie zum Erstellen eines benutzerdefinierten Tabellentyps die CREATE TYPE-Anweisung. Damit sichergestellt ist, dass die Daten in einem benutzerdefinierten Tabellentyp bestimmte Anforderungen erfüllen, können Sie eindeutige Einschränkungen und Primärschlüssel für den benutzerdefinierten Tabellentyp erstellen.

Informationen zu den benutzerdefinierten Typen zugeordneten Katalogsichten finden Sie unter sys.types und sys.table_types.

Einschränkungen

Benutzerdefinierte Tabellentypen weisen die folgenden Einschränkungen auf:

  • Ein benutzerdefinierter Tabellentyp kann nicht als Spalte in einer Tabelle oder als Feld in einem strukturierten benutzerdefinierten Typ verwendet werden.

  • Aliastypen auf der Grundlage eines benutzerdefinierten Tabellentyps

  • Die [NOT FOR REPLICATION]-Option ist nicht zulässig.

  • Für CHECK-Einschränkungen muss eine berechnete Spalte beibehalten werden.

  • Der Primärschlüssel für berechnete Spalten muss PERSISTED und NOT NULL sein.

  • Ein nicht gruppierter Index kann nur dann für einen benutzerdefinierten Typ erstellt werden, wenn der Index das Ergebnis der Erstellung einer PRIMARY KEY- oder UNIQUE-Einschränkung des benutzerdefinierten Tabellentyps ist. (SQL Server erzwingt alle UNIQUE- oder PRIMARY KEY-Einschränkungen durch die Verwendung eines Index.)

  • Die Definition des benutzerdefinierten Tabellentyps kann nach dem Erstellen nicht geändert werden.

  • Benutzerdefinierte Funktionen können in der Definition von berechneten Spalten eines benutzerdefinierten Tabellentyps nicht aufgerufen werden.

Sicherheit

Berechtigungen für benutzerdefinierte Tabellentypen orientieren sich am Objektsicherheitsmodell für SQL Server, indem die folgenden Transact-SQL-Schlüsselwörter verwendet werden: CREATE, GRANT, DENY, ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE, VIEW DEFINITION und REVOKE.

HinweisHinweis

Die CONTROL-Berechtigung für einen Tabellentyp impliziert alle anderen Berechtigungen für den Tabellentyp.

Eine Schemabindung wird eingerichtet, wenn die Funktion, in der die DECLARE-Anweisung auftritt, WITH SCHEMABINDING angibt. Die REFERENCES-Berechtigung ist für den benutzerdefinierten Tabellentyp erforderlich, wenn es sich bei dem Tabellentyp um einen Parameter in einer Routine handelt oder wenn SCHEMABINDING angegeben wurde. In allen anderen Fällen wird keine Schemabindung eingerichtet, und die REFERENCES-Berechtigung ist für den benutzerdefinierten Tabellentyp nicht erforderlich.

Zum Deklarieren einer Tabellenvariablen, die einen benutzerdefinierten Tabellentyp verwendet, ist die EXECUTE-Berechtigung für diesen benutzerdefinierten Tabellentyp erforderlich.

HinweisHinweis

Die CASCADE-Option wird für benutzerdefinierte Tabellentypberechtigungen nicht erzwungen, da ein benutzerdefinierter Tabellentyp nicht in eine Definition eingebettet werden kann.

Beispiele

A. Erstellen eines benutzerdefinierten Tabellentyps

Das folgende Beispiel zeigt, wie ein benutzerdefinierter Tabellentyp erstellt wird:

USE AdventureWorks;
GO

/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50)
, CostRate INT );
GO

B. Widerrufen von Berechtigungen für einen benutzerdefinierten Tabellentyp

Im folgenden Beispiel wird das Widerrufen von Berechtigungen für einen bestimmten benutzerdefinierten Tabellentyp veranschaulicht. Die REFERENCES-Berechtigung wird für den Benutzer JoAnna bei dem benutzerdefinierten Tabellentyp CustomerListType widerrufen, der sich im relationalen Schema mySchema in der Datenbank myDatabase befindet.

USE myDatabase
GO
REVOKE REFERENCES ON TYPE::[mySchema].[CustomerListType] FROM JoAnna
GO

Änderungsverlauf

Der Inhalt wurde aktualisiert.

Folgender Satz wurde aus dem Abschnitt mit den Einschränkungen entfernt: Ein DEFAULT-Wert kann in der Definition eines benutzerdefinierten Tabellentyps nicht angegeben werden.