Aracılığıyla paylaş


Kullanıcı tanımlı türler uygulama

Bu konuda nasıl oluşturulacağı ve ortak dil çalışma zamanı (clr) kullanıcı tanımlı türler bırak açıklar SQL Server.

Kullanıcı tanımlı türler oluşturma

kullanıcı tanımlı tür oluşturmak için SQL Server, sırayla aşağıdaki adımların gerçekleştirilmesi gerekir:

  • Define the user-defined type as a class or structure in a language supported by the Microsoft .NET Framework.Nasıl program clr türleri hakkında daha fazla bilgi için bkz: clr programlama örnekleri. Örnekleri hakkında daha fazla bilgi için bkz: SQL Server Örnekleri ve Örnek Veritabanlarının Yüklenmesiyle İlgili Önemli Noktalar.Daha sonra sınıf veya yapı bir derleme oluşturmak için derleme .NET Framework kullanarak uygun dil derleyici.

  • Derleme kaydı SQL Server kullanarak DERLEME oluşturma deyim.Derlemeleri hakkında daha fazla bilgi için SQL Server, bkz: Derlemeler (veritabanı altyapısı).

  • Kayıtlı derleme başvuran türü oluşturun.

Not

Deploying a SQL Server Project in Microsoft Visual Studio registers an assembly in the database that was specified for the project.Project dağıtma de oluşturur clr kullanıcı tanımlı türler veritabanında tüm sınıf tanımları ile açıklama için SqlUserDefinedType öznitelik.Daha fazla bilgi için bkz: clr veritabanı nesnelerini dağıtma.

Not

Varsayılan olarak, yeteneğini SQL Server clr kodu yürütecek olan küme aygıtlarım içinOluşturmak, değiştirmek ve yönetilen kod modülleri başvuru veritabanı nesnelerini bırakın, ancak bu başvuruları olacak değil yürütmek , SQL Server sürece clr seçeneği etkin kullanarak etkin sp_configure.

Oluşturmak, değiştirmek veya bir derleme bırakmak için

kullanıcı tanımlı tür oluşturmak için

Kullanıcı tanımlı türler siliniyor

kullanıcı tanımlı tür bırakmak için

Not

Tablolar veya dizinlerin veri değişiklikleri geçersiz kılmak çünkü kullanıcı tanımlı türler oluşturulduktan sonra değiştirilemez.Bir türünü değiştirmek için yazının aşağı ve sonra yeniden veya sorun bir alter assembly ile DENETLENMEYEN veri yan tümce tümce tümce kullanarak deyim.

Bu türdeki tüm başvuruları kaldırılana kadar kullanıcı tanımlı tür bırakamazsınız.Bu başvuruları aşağıdakileri içerebilir:

  • Türü üzerinde tanımlı sütunları.

  • Hesaplanan sütunlar ve ifadeler, başvuru onay kısıtlamaları

  • Şemaya bağlı görünümler ve İşlevler başvuru bunların tanımları ifadelerde ile.

  • Parametreleri, işlevleri ve saklı yordamlar.

Sütunları bağımlı bulmak için birkullanıcı tanımlı tür

Aşağıdaki örnek, kullanıcı tanımlı tür üzerinde tanımlı sütunları hakkında meta veriler alır ComplexNumber.

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

Aşağıdaki örnek, kullanıcı tanımlı tür üzerinde tanımlı sütunları hakkında en az ayrıcalıklı kullanıcılar için sınırlı meta veriler alır ComplexNumber.

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

Hesaplanan sütun ifadeler bulmak için kısıtlama ifadelerinin ve kullanıcı tanımlı tür bağımlı modül ifadeler DENETLEYİN

Aşağıdaki örnek bir bağımlılık kullanıcı tanımlı tür ile hesaplanan sütunlar (ve tabloları) adlarını alır 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; 

Aşağıdaki örnek bir bağımlılık kullanıcı tanımlı tür ile kontrol kısıtlamaları (ve nesneler üzerinde bunlar tanımlanır) adlarını alır 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;

Aşağıdaki örnek, tanımları başvuru modülleri adlarını alır kullanıcı tanımlı tür SimpleUdt.

USE AdventureWorks2008R2;
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

Parametreleri bağlı olarak bulmak için birkullanıcı tanımlı tür

Aşağıdaki örnek alır parametreleri (ve ait oldukları nesneler) adları, kullanıcı tanımlı tür üzerinde tanımlı 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;

Aşağıdaki örnek, kullanıcı tanımlı tür üzerinde tanımlı parametreleri hakkında en az ayrıcalıklı kullanıcılar için sınırlı meta veriler alır ComplexNumber.

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