Aracılığıyla paylaş


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

Bu konuda nasıl oluşturulacağı ve ortak dil çalışma zamanı (CLR) türleri kullanıcı tanımlı bırakma açıklanmaktadır. SQL Server.

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

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

  • Define the user-defined type as a class or structure in a language supported by the Microsoft .NET Framework.CLR program türleriyle ilgili daha fazla bilgi için bkz: CLR kullanıcı tanımlı türler. Ardından, sınıf veya yapı bir birleştirme oluşturmaya derleme .NET Framework uygun dil derleyici kullanıyor.

  • Derlemede kaydetme SQL Server derleme CREATE deyim kullanarak. Derlemelerde hakkında daha fazla bilgi için SQL Server, bkz: Derlemeler (Veritabanı Altyapısı).

  • Kayıtlı bir derlemeye başvuruyor 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.Ile tüm sınıf tanımlarının açıklamalı için proje dağıtımı ayrıca CLR kullanıcı tanımlı türler veritabanında oluşturur SqlUserDefinedType Öznitelik. Daha fazla bilgi için bkz:CLR veritabanı nesnelerini dağıtma.

Not

Varsayılan olarak, yeteneği SQL Server yürütmek CLR kod KAPALı olarak küme. Oluşturabilir, değiştirebilir ve yönetilen kod modüllerini başvuran veritabanı nesnelerini bırakın; ancak, bu başvuruları çalıştırmaz SQL Server sürece CLR seçeneği etkinleştirildi. kullanarak etkinsp_configure.

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

Bir kullanıcı tanımlı tür

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

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

Not

Değişiklikleri veri tabloları veya dizin geçersiz, çünkü bunlar oluşturduktan sonra kullanıcı tanımlı türler değiştirilemez.Bir türünü değiştirmek için , ya da türü bırakın ve sonra onu yeniden veya gerekir sorun bir DERLEME DEĞİŞTİRME ekstresi DENETLENMEYEN VERI, WITH yan tümce kullanarak.

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

  • Sütun türü üzerinde tanımlanmış.

  • Hesaplanan sütunlar ve türü, ifadeleri başvuru CHECK kısıtlamaları

  • Şemaya bağlı görünümler ve deyimler tür başvuru kendi tanımlarındaki işlevleriyle.

  • Parametreleri, işlevleri ve saklı yordamlar.

Sütun, bir kullanıcı tanımlı tür bağımlı bulmak için

Aşağıdaki örnek üzerinde kullanıcı tanımlı tür 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ığı bulunmayan kullanıcıların 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, CHECK kısıtlaması ifadeleri ve modül ifadeler bağımlı bulmak için bir kullanıcı tanımlı tür

Aşağıdaki örnek bir bağımlılık kullanıcı tanımlı tür ile hesaplanan bir sütun adlarını (ve tablolarıyla) 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 kullanıcı tanımlı tür bağımlılık ile CHECK kısıtlamaları (ve nesneler tanımlandıkları) 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ı, kullanıcı tanımlı tür başvuru modülleri adlarını alır. 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

Parametreleri, bir kullanıcı tanımlı tür bağımlı bulunamıyor

Kullanıcı tanımlı türüne parametreleri (ve ait oldukları nesneler) adları, tanımlı bir aşağıdaki örnek alır 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ığı bulunmayan kullanıcıların sınırlı meta veriler alır ComplexNumber.

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