Share via


Verwenden und Ändern von Instanzen von benutzerdefinierten Typen

Es gibt folgende Möglichkeiten, um mit benutzerdefinierten Typen zu arbeiten:

  • Erstellen von Tabellen mit Spalten eines benutzerdefinierten Typs

  • Einfügen und Ändern der Spaltenwerte von benutzerdefinierten Typen

  • Verwenden eines benutzerdefinierten Typs als Variable oder Parameter

Erstellen von Tabellen mit Spalten eines benutzerdefinierten Typs

Sie können eine Tabelle mit Spalten eines benutzerdefinierten Typs erstellen, indem Sie einen Spaltennamen angeben und dann auf den Typnamen verweisen. Dieses Verfahren ähnelt dem Erstellen von Spalten, die aus systembasierten Datentypen oder Aliastypen bestehen. Wenn Sie eine Spalte für einen CLR-benutzerdefinierten Typ (Common Language Runtime) erstellen möchten, müssen Sie die REFERENCES-Berechtigung für den Typ besitzen.

So erstellen Sie eine Tabelle mit Spalten eines benutzerdefinierten Typs

Einfügen und Ändern der Spaltenwerte von benutzerdefinierten Typen

Sie können Spaltenwerte einfügen und ändern sowie die Werte von Variablen und Parametern des benutzerdefinierten Typs ändern.

HinweisHinweis

Benutzerdefinierte Typen können nicht mehr geändert werden, nachdem sie erstellt wurden, da die Daten in den Tabellen oder Indizes durch Änderungen ungültig werden könnten. Wenn Sie einen Typ ändern möchten, müssen Sie den Typ löschen und dann neu erstellen oder eine ALTER ASSEMBLY-Anweisung mithilfe der WITH UNCHECKED DATA-Klausel ausgeben. Weitere Informationen finden Sie unter ALTER ASSEMBLY (Transact-SQL).

Sie können Werte für Spalten mit benutzerdefiniertem Typ einfügen oder ändern, indem Sie folgendermaßen vorgehen:

  • Bereitstellen eines Wertes in einem SQL Server-Systemdatentyp, vorausgesetzt, der benutzerdefinierte Typ unterstützt die implizite oder explizite Konvertierung aus diesem Typ. Im folgenden Beispiel wird gezeigt, wie Sie einen Wert in einer Spalte des benutzerdefinierten Typs Point durch explizites Konvertieren aus einer Zeichenfolge aktualisieren:

    UPDATE Cities
    SET Location = CONVERT(Point, '12.3:46.2')
    WHERE Name = 'Anchorage'
    
  • Aufrufen einer Methode des benutzerdefinierten Typs, die als mutator markiert ist, um die Aktualisierung auszuführen. Das folgende Beispiel ruft eine Mutatormethode vom Typ point namens SetXY auf, die den Status der Instanz des Typs aktualisiert:

    UPDATE Cities
    SET Location.SetXY(23.5, 23.5)
    WHERE Name = 'Anchorage'
    
    HinweisHinweis

    SQL Server gibt einen Fehler zurück, wenn eine mutator-Methode für einen NULL-Wert von Transact-SQL aufgerufen wird oder wenn ein neuer von einer mutator-Methode generierter Wert null ist.

  • Ändern des Wertes einer Eigenschaft oder eines öffentlichen Feldes des benutzerdefinierten Typs. Der Ausdruck, der den Wert bereitstellt, muss implizit in den Typ der Eigenschaft konvertiert werden können. Im folgenden Beispiel wird der Wert der X-Eigenschaft des benutzerdefinierten Typs point geändert:

    UPDATE Cities
    SET Location.X = 23.5
    WHERE Name = 'Anchorage'
    

    Wenn Sie verschiedene Eigenschaften derselben Spalte mit benutzerdefiniertem Typ ändern möchten, geben Sie mehrere UPDATE-Anweisungen aus, oder rufen Sie eine mutator-Methode des Typs auf.

Das folgende Beispiel fügt Werte des Typs Point in die Tabelle ein:

INSERT INTO Cities (Name, Location)
VALUES ('Anchorage', CONVERT(Point, '23.5, 23.5'))

So fügen Sie den Wert eines benutzerdefinierten Typs in eine Tabelle oder Sicht ein

  • INSERT (Transact-SQL)

  • So aktualisieren Sie den Wert eines benutzerdefinierten Typs in einer Tabelle oder Sicht

UPDATE (Transact-SQL)

Verwenden eines benutzerdefinierten Typs als Variable oder Parameter

Sie können eine Transact-SQL-Variable oder den Parameter einer Transact-SQL- oder Microsoft.NET Framework-Funktion oder -Prozedur als benutzerdefinierten Typ deklarieren. Dabei gelten die folgenden Regeln:

  • Sie müssen EXECUTIVE-Berechtigungen für diesen Typ besitzen.

  • Wenn Sie eine Funktion, eine gespeicherte Prozedur oder einen Trigger erstellen, die bzw. der eine benutzerdefinierte Typdeklaration mit Schemabindung enthält, müssen Sie die REFERENCES-Berechtigung für den Typ besitzen.

Wenn Sie einen einteiligen Namen verwenden, sucht SQL Server den Typverweis in der folgenden Reihenfolge:

  1. Im Schema des aktuellen Benutzers in der aktuellen Datenbank.

  2. Im dbo-Schema in der aktuellen Datenbank.

  3. Im systemeigenen Typbereich.

So deklarieren Sie einen benutzerdefinierten Typ als Transact-SQL-Variable oder -Parameter einer Funktion oder Prozedur

Einschränkungen der Verwendung benutzerdefinierter Typen

Wenn Sie benutzerdefinierte Typen erstellen und mit diesen arbeiten, beachten Sie Folgendes:

  • Sie können keine Länge, Dezimalstellen, Genauigkeit oder andere Metadaten definieren, wenn Sie einen benutzerdefinierten Typ in SQL Server erstellen.

  • Spalten, Variablen oder Parameter können nicht als benutzerdefinierter Typ deklariert werden, der in einer anderen Datenbank definiert ist. Weitere Informationen finden Sie unter Datenbankübergreifendes Verwenden benutzerdefinierter Datentypen.

  • Wenn Sie bestimmen möchten, ob ein benutzerdefinierter Typ identisch mit einem zuvor definierten Typ ist, vergleichen Sie nicht die Typ-ID, da diese nur für die Lebensdauer des benutzerdefinierten Typs gültig ist und ggf. erneut verwendet wird. Vergleichen Sie stattdessen den CLR-Typnamen, den vierteiligen Assemblynamen und die Assemblybytes.

  • sql_variant-Spalten können keine Instanzen eines benutzerdefinierten Typs enthalten.

  • Benutzerdefinierte Typen können nicht als Standardwerte in CLR-Prozeduren, -Funktionen oder -Triggern oder in Partitionsfunktionen verwendet werden.

  • In berechneten Spalten von table-Variablen kann nicht auf benutzerdefinierte Typen verwiesen werden.