Udostępnij za pośrednictwem


Implementing User-defined Types

W tym temacie opisano sposób tworzenia i upuść powszechnie używanych typów języka (CLR) w czasie wykonywania przez użytkownika w SQL Server.

Tworzenie typów zdefiniowanych przez użytkownika

Aby utworzyć typ zdefiniowany przez użytkownika w SQL Server, należy wykonać następujące kroki w celu:

  • Define the user-defined type as a class or structure in a language supported by the Microsoft .NET Framework.Aby uzyskać więcej informacji na temat typów programów w środowisko CLR zobacz Środowisko CLR Typy definiowane przez użytkownika. Następnie należy skompilować klasy lub struktury w celu utworzenia wirtualny plik dziennika w .NET Framework za pomocą kompilatora odpowiedniego języka.

  • Zarejestruj się w zestawie SQL Server za pomocą instrukcja CREATE wirtualny plik dziennika. Aby uzyskać więcej informacji na temat zestawów w SQL Server, zobacz Zestawy (aparat bazy danych).

  • Utwórz typ, który odwołuje się do zarejestrowanych wirtualny plik dziennika.

Uwaga

Deploying a SQL Server Project in Microsoft Visual Studio registers an assembly in the database that was specified for the project.Wdrażanie projektu tworzy również CLR typów zdefiniowanych przez użytkownika w bazie danych dla wszystkich definicji klasy odnotowany z SqlUserDefinedType atrybut. Aby uzyskać więcej informacji zobaczRozmieszczanie obiektów bazy danych do środowiska CLR.

Uwaga

Domyślnie, zdolność SQL Server wykonać CLR kodu jest ustawiona na wyłączona. Można tworzyć, modyfikować i upuszczać obiekty bazy danych, które odwołują się do modułów kod zarządzany, ale te odwołania nie będą wykonać w SQL Server chyba że CLR włączona opcja za pomocą jest włączonasp_configure.

Aby utworzyć, zmodyfikować lub usunąć wirtualny plik dziennika

Aby utworzyć typ zdefiniowany przez użytkownika

Upuszczanie typów zdefiniowanych przez użytkownika

Aby usunąć typ zdefiniowany przez użytkownika

Uwaga

Typy zdefiniowane przez użytkownika nie można zmodyfikować po ich utworzeniu, ponieważ zmiany mogą unieważnić danych w tabelach lub indeksy.Aby zmodyfikować typu, należy albo upuszczanie typu i następnie odtworzyć go lub wydania ZMIANA wirtualny plik dziennika instrukcja przy użyciu klauzula WITH NIEZAZNACZONE dane.

Typ zdefiniowany przez użytkownika nie można usunąć, dopóki zostaną usunięte wszystkie odwołania do tego typu.Odwołania do tych mogą być następujące:

  • Określony w typie kolumny.

  • Obliczona kolumny i wyrażenia, którego odwołać typ ograniczenia CHECK.

  • Funkcje z wyrażeń w ich definicje, które odwołują się do typu i widoków związanych ze schematem.

  • Parametry funkcji i procedur przechowywanych.

Aby znaleźć zależne od typ zdefiniowany przez użytkownika kolumn

Poniższy przykład pobiera metadane dotyczące kolumn zdefiniowanych na typ zdefiniowany przez użytkownika ComplexNumber.

SELECT * FROM sys.columns 
WHERE user_type_id = TYPE_ID('ComplexNumber');

Poniższy przykład pobiera ograniczone metadane dla użytkowników najmniejszych uprawnieniach kolumny zdefiniowane na typ zdefiniowany przez użytkownika — informacje ComplexNumber.

SELECT * FROM sys.column_type_usages 
WHERE user_type_id = TYPE_ID('ComplexNumber');

Aby znaleźć wyrażenie kolumna obliczana, sprawdź ograniczenia wyrażeń i wyrażeń moduł zależne od typ zdefiniowany przez użytkownika

Poniższy przykład pobiera nazwy kolumn obliczanych (i ich tabel) z zależnością typ zdefiniowany przez użytkownika SimpleUdt.

SELECT OBJECT_SCHEMA_NAME (referencing_id) AS referencing_schema_name,
    OBJECT_NAME(referencing_id) AS referencing_name,
    COL_NAME(referencing_id, referencing_minor_id) AS column_name,
    is_caller_dependent,
    is_ambiguous
FROM sys.sql_expression_dependencies
WHERE referenced_id = TYPE_ID('SimpleUdt')
    AND referenced_class = 6 
    AND OBJECTPROPERTY(referencing_id, 'IsTable')=1; 

Poniższy przykład pobiera nazwy ograniczenia wyboru (oraz obiekty, na którym są zdefiniowane) z zależność od typów zdefiniowanych przez użytkownika SimpleUdt.

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_expression_dependencies AS d
JOIN sys.objects AS o
ON o.object_id = d.referencing_id
WHERE referenced_id = TYPE_ID('SimpleUdt')
AND referenced_class = 6 
AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst')=1;

Poniższy przykład pobiera nazwy modułów, których definicje odwołać typ zdefiniowany przez użytkownika SimpleUdt.

USE AdventureWorks;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('SimpleUdt', 'TYPE');
GO

Aby odnaleźć parametrów zależne od typ zdefiniowany przez użytkownika

Następujące pobiera przykład nazwy parametrów (i obiektów, do których należą) są określane na typ zdefiniowany przez użytkownika ComplexNumber.

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;

Poniższy przykład pobiera metadane ograniczone do najmniejszych uprawnieniach użytkowników o parametrach określonych na typ zdefiniowany przez użytkownika ComplexNumber.

SELECT * FROM sys.parameter_type_usages 
WHERE user_type_id = TYPE_ID('ComplexNumber');