Ausführen von Operationen an benutzerdefinierten Typen
Sie können eine Reihe von Operationen an Instanzen von benutzerdefinierten Typen ausführen. Dazu gehören die folgenden Operationen:
Aufrufen von Methoden oder Eigenschaften von benutzerdefinierten Typen.
Ausführen von Datentypkonvertierungen.
Zurückgeben der Werte von benutzerdefinierten Typen an einen SQL-Client.
Verwenden von ORDER BY-Klauseln.
Erstellen von Indizes für Spalten mit benutzerdefinierten Typen.
Erstellen von berechneten Spalten.
Aufrufen von Methoden oder Eigenschaften von benutzerdefinierten Typen
Sie können an jeder beliebigen Stelle, an der ein skalarer Ausdruck erscheinen kann, eine Methode oder eine Eigenschaft eines benutzerdefinierten Typs aufrufen. Sie müssen EXECUTIVE-Berechtigungen für diesen Typ haben. Methoden, die den Status von Daten außerhalb einer UPDATE-Anweisung ändern, werden zwar ausgeführt, die Änderungen werden jedoch ignoriert, weil änderbare Methoden in Abfragen nicht zulässig sind.
Zeichenfolgen, die von Methoden eines benutzerdefinierten Typs zurückgegeben werden, übernehmen unabhängig von der aktuellen Datenbank die Sortierung der Datenbank, in der der benutzerdefinierte Typ erstellt wurde.
Vorsicht |
---|
Methoden und Eigenschaften, die in SELECT-Anweisungen verwendet werden, dürfen keine Nebeneffekte haben. Wenn eine in einer SELECT-Anweisung verwendete Methode Nebeneffekte hat, sind die Ergebnisse nicht deterministisch. |
Vorsicht |
---|
Wenn Methoden- oder Eigenschaftenaufrufe für benutzerdefinierte Typen erfolgen, für die berechnete Spalten erstellt werden, und der Aufruf im Kontext einer Operation für die berechnete Spalte erfolgt, werden die EXECUTE-Berechtigungen für den Typ nicht überprüft. Stattdessen werden die Berechtigungen überprüft, wenn die berechnete Spalte erstellt wird. |
So rufen Sie eine Methode oder eine Eigenschaft eines benutzerdefinierten Typs auf
Hinweis |
---|
SQL Server Management Studio gibt Werte von benutzerdefinierten Typen in binärer Darstellung zurück. Um Werte von benutzerdefinierten Typen als Zeichenfolge oder im XML-Format zurückzugeben, verwenden Sie CAST oder CONVERT. |
Ausführen von Datentypkonvertierungen mit benutzerdefinierten Typen
Sie können implizite und explizite Konvertierungen mit benutzerdefinierten Typen durchführen. Diese Konvertierungen sind in der folgenden Tabelle zusammengefasst.
|
IN: Benutzerdefinierter Typ |
Binär |
nvarchar |
xml |
---|---|---|---|---|
VON: Benutzerdefinierter Typ |
|
Explizit |
Explizit |
Implizit |
Binär |
Implizit |
|
|
|
nvarchar |
Implizit |
|
|
|
xml |
Implizit |
|
|
|
Im folgenden Beispiel wird eine Instanz des benutzerdefinierten Typs ComplexNumber explizit in das xml-Format konvertiert und ein XQuery-Ausdruck für den Typ aufgerufen.
DECLARE @c ComplexNumber
SET @c = CONVERT(ComplexNumber, '(1,2i)')
SELECT CAST(@c AS xml).query('//Real/text()')
Im folgenden Beispiel werden xml-Daten implizit in eine Instanz des benutzerdefinierten Typs ComplexNumber konvertiert.
DECLARE @x xml, @u ComplexNumber
SET @x = '<ComplexNumber><Real>100</Real><Imaginary>4</Imaginary></ComplexNumber>'
SET @u = @x -- implicit convert
SELECT @u.ToString()
Weitere Informationen finden Sie unter CAST und CONVERT (Transact-SQL).
Zurückgeben der Werte von benutzerdefinierten Typen an einen SQL-Client
Wenn eine Spalte oder ein Ausdruck eines benutzerdefinierten Typs als Ergebnis einer SELECT- oder FETCH-Anweisung an einen SQL-Client zurückgegeben wird, richtet sich die API-Zugriffsmethode des Clients auf die Spalte danach, ob die Client-API eine verwaltete (ADO.NET) oder nicht verwaltete API (ODBC oder OLE DB) ist. Wenn der Client ADO.NET verwendet, kann er eine Instanz des Typs als binären Wert (durch Verwenden der GetValue-Methode für die SqlDataReader-Klasse) oder als Objekt abrufen. Wenn der Client OLE DB verwendet, empfängt er Werte von benutzerdefinierten Typen als binären Wert. Bei Verwendung von ODBC empfängt der Client den Wert des benutzerdefinierten Typs nur als binären Wert.
Verwenden von ORDER BY-, GROUP BY- und PARTITION BY-Klauseln mit benutzerdefinierten Typen
Sie können ORDER BY-, GROUP BY- und PARTITION BY-Operationen mit benutzerdefinierten Typen ausführen, wenn der Typ die binäre Sortierung unterstützt. Ein Typ gilt als binär sortiert, wenn sein IsByteOrdered-Flag im SqlUserDefinedType-Attribut, das im Rahmen der Typdefinition angegeben wird, auf TRUE festgelegt wurde. Dieses Flag zeigt an, dass die binäre Darstellung für den Typ die für diesen Typ semantisch richtige Reihenfolge aufweist.
Erstellen von Indizes für Spalten mit benutzerdefinierten Typen
Sie können Indizes für Spalten mit benutzerdefinierten Typen erstellen, wenn der Typ die binäre Sortierung unterstützt. Sie können auch Indizes für berechnete Spalten erstellen, die als Methodenaufrufe aus einer Spalte mit benutzerdefinierten Typen definiert sind, sofern die Methoden als deterministisch gekennzeichnet sind. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.