Implementieren benutzerdefinierter Typen
Aktualisiert: 14. April 2006
In diesem Thema wird das Erstellen und Löschen von benutzerdefinierten CLR-Typen (Common Language Runtime) in SQL Server beschrieben.
Erstellen benutzerdefinierter Typen
Wenn Sie einen benutzerdefinierten Typ in SQL Server erstellen möchten, müssen Sie folgende Schritte in der angegebenen Reihenfolge ausführen:
- Definieren Sie den benutzerdefinierten Typ als eine Klasse oder Struktur in einer von Microsoft .NET Framework unterstützten Sprache. Weitere Informationen zum Programmieren von Typen in der CLR finden Sie unter CLR User-Defined Types. Kompilieren Sie anschließend die Klasse oder Struktur mithilfe des entsprechenden Sprachcompilers, um eine Assembly in .NET Framework zu erstellen.
- Registrieren Sie die Assembly in SQL Server mithilfe der CREATE ASSEMBLY-Anweisung. Weitere Informationen zu Assemblys in SQL Server finden Sie unter Assemblys (Database Engine).
- Erstellen Sie den Typ, der auf die registrierte Assembly verweist.
Hinweis: |
---|
Bei der Bereitstellung eines SQL Server-Projekts in Microsoft Visual Studio wird eine Assembly in der Datenbank registriert, die für das Projekt angegeben wurde. Bei der Bereitstellung des Projekts werden in der Datenbank auch benutzerdefinierte CLR-Typen für alle Klassendefinitionen erstellt, die mit dem SqlUserDefinedType-Attribut versehen sind. Weitere Informationen finden Sie unter Deploying CLR Database Objects. |
Hinweis: |
---|
Standardmäßig ist die Option zum Ausführen von CLR-Code für SQL Server auf OFF festgelegt. Sie können Datenbankobjekte, die auf verwaltete Codemodule verweisen, erstellen, ändern und löschen. Diese Verweise werden jedoch in SQL Server nicht ausgeführt, es sei denn, die Option clr enabled ist mit sp_configure aktiviert. |
So erstellen, ändern oder löschen Sie eine Assembly
So erstellen Sie einen benutzerdefinierten Typ
Löschen benutzerdefinierter Typen
So löschen Sie einen benutzerdefinierten Typ
Hinweis: |
---|
Benutzerdefinierte Typen können nicht geändert werden, nachdem sie erstellt wurden, da durch Änderungen möglicherweise Daten in Tabellen oder Indizes ungültig werden. Wenn Sie einen Typ ändern möchten, müssen Sie ihn entweder löschen und anschließend neu erstellen oder mithilfe der WITH UNCHECKED DATA-Klausel eine ALTER ASSEMBLY-Anweisung ausgeben. |
Sie können einen benutzerdefinierten Typ erst löschen, nachdem alle Verweise auf diesen Typ entfernt wurden. Diese Verweise können sich u. a. wie folgt zusammensetzen:
- Für den Typ definierte Spalten.
- Berechnete Spalten und CHECK-Einschränkungen, deren Ausdrücke auf den Typ verweisen.
- Schemagebundene Sichten und Funktionen mit Ausdrücken in ihren Definitionen, die auf den Typ verweisen.
- Parameter von Funktionen und gespeicherten Prozeduren
So finden Sie Spalten, die von einem benutzerdefinierten Typ abhängig sind
Im folgenden Beispiel werden Metadaten zu für den benutzerdefinierten Typ ComplexNumber
definierten Spalten abgerufen.
SELECT * FROM sys.columns
WHERE user_type_id = TYPE_ID('ComplexNumber');
Im folgenden Beispiel werden beschränkte Metadaten für Benutzer mit minimalen Privilegien zu für den benutzerdefinierten Typ ComplexNumber
definierten Spalten abgerufen.
SELECT * FROM sys.column_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
So finden Sie berechnete Spaltenausdrücke, CHECK-Einschränkungsausdrücke und schemagebundene Sicht- und Funktionsausdrücke, die von einem benutzerdefinierten Typ abhängig sind
Im folgenden Beispiel werden die Namen von berechneten Spalten (und ihre Tabellen) mit einer Abhängigkeit vom benutzerdefinierten Typ ComplexNumber
abgerufen.
SELECT OBJECT_NAME(object_id) AS object_name,
COL_NAME(object_id, column_id) AS column_name
FROM sys.sql_dependencies
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(object_id, 'IsTable')=1;
Im folgenden Beispiel werden die Namen von CHECK-Einschränkungen (und der Objekte, für die sie definiert sind) mit einer Abhängigkeit vom benutzerdefinierten Typ ComplexNumber
abgerufen.
SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
OBJECT_NAME(o.parent_object_id) AS table_name,
OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst')=1;
Im folgenden Beispiel werden die Namen von schemagebundenen Funktionen und Sichten abgerufen, deren Definitionen auf den benutzerdefinierten Typ ComplexNumber
verweisen.
Hinweis: |
---|
SQL Server verwaltet keine Metadaten zu Abhängigkeiten zwischen benutzerdefinierten Typen und deren Verwendung im Hauptteil von gespeicherten Prozeduren, Triggern, nicht-schemagebundenen Funktionen oder nicht-schemagebundenen Sichten. |
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema,
OBJECT_NAME(o.object_id) AS dependent_object_name,
o.type_desc AS dependent_object_type,
d.class_desc AS kind_of_dependency,
d.referenced_major_id AS referenced_object
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON d.object_id = o.object_id
AND o.type IN ('FN','IF','TF', 'V')
WHERE d.class = 2
AND d.referenced_major_id IN (TYPE_ID('ComplexNumber'))
ORDER BY dependent_object_schema, dependent_object_name;
So finden Sie Parameter, die von einem benutzerdefinierten Typ abhängig sind
Im folgenden Beispiel werden die Namen von Parametern (und der Objekte, zu denen sie gehören) abgerufen, die für den benutzerdefinierten Typ ComplexNumber
definiert sind.
SELECT OBJECT_NAME(object_id) AS object_name,
NULL AS procedure_number,
name AS param_name,
parameter_id AS param_num,
TYPE_NAME(p.user_type_id) AS type_name
FROM sys.parameters AS p
WHERE p.user_type_id = TYPE_ID('ComplexNumber')
ORDER BY object_name, procedure_number, param_num;
Im folgenden Beispiel werden beschränkte Metadaten für Benutzer mit minimalen Privilegien zu für den benutzerdefinierten Typ ComplexNumber
definierten Parametern abgerufen.
SELECT * FROM sys.parameter_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
Siehe auch
Konzepte
Arbeiten mit CLR-benutzerdefinierten Typen
Andere Ressourcen
Beispiele für die CLR-Programmierbarkeit
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
14. April 2006 |
|