Aracılığıyla paylaş


Kullanıcı tanımlı tür gereksinimleri

You must make several important design decisions when creating a user-defined type (UDT) to be installed in Microsoft SQL Server.Bir sınıf olarak oluşturduktan bir seçenek de, ancak çoğu UDTs için bir yapı olarak UDT oluşturma, önerilir.UDT tanımını sağlamak için birlikte kaydedilmesi için UDTs oluşturmak için bu belirtimlerine uymalıdır SQL Server.

UDTs uygulama gereksinimleri

Çalışması için SQL Server, sizin UDT UDT tanımında aşağıdaki gereksinimleri uygulamalısınız:

UDT belirtmelisiniz Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute. Kullanımını System.SerializableAttribute isteğe bağlıdır, ancak önerilen olur.

  • The UDT must implement the System.Data.SqlTypes.INullable interface in the class or structure by creating a public static (Shared in Microsoft Visual Basic) Null method.SQL Server is null-aware by default.Bu, boş (null) değer tanıması için UDT çalıştırılan kod için gereklidir.

  • UDT genel içermelidir static (veya Shared) Parse gelen ayrıştırma destekleyen bir yöntem ve genel ToString bir nesnenin dize gösterimine dönüştürmek için yöntem.

  • Bir kullanıcı tanımlı bir seri hale getirme biçimi ile ilgili BIR UDT uygulamalıdır System.Data.IBinarySerialize arabirim ve sağlayan bir Read ve bir Write yöntem.

  • UDT uygulamalıdır System.Xml.Serialization.IXmlSerializable, veya, seri hale getirilebilir veya Süslenen ile XML türü olmalıdır, tüm ortak alanlar ve Özellikler XmlIgnore Standart seri hale getirme geçersiz kılma, özniteliği gerekiyor.

  • UDT nesnesi yalnızca bir seri hale getirme olması gerekir.Doğrulama başarısız olur serialize veya serisini yordamlar, belirli bir nesneye birden fazla sunumunu tanımak.

  • SqlUserDefinedTypeAttribute.IsByteOrdered olmalıdır true Sunucu UDT değerleri bayt sipariş karşılaştırmaları kullanmasını sağlamak için.

  • Bir sınıf içinde tanımlanan BIR UDT, bağımsız değişken götüren bir genel oluşturucuya sahip olmalıdır.Isteğe bağlı olarak, ek yüklenmiş sınıfı Kurucular oluşturabilirsiniz.

  • Veri öğelerini ortak bir alan veya özellik yordamlar UDT bulaşmasına neden gerekir.

  • Ortak adı 128 karakterden uzun olamaz ve uyması gereken SQL Server adlandırma kuralları tanımlandığı gibi tanımlayıcıları Tanımlayıcılar.

  • sql_variant Sütun bir UDT örneğini içeremez.

  • Devralınan üyeleri erişilebilir değil. Transact-SQL çünkü SQL Server Tür sistemi arasında UDTs devralma hiyerarşinin uyumlu değil. Ancak, devralma, sınıfları yapılandırın ve türü yönetilen kod uygulamasında gibi yöntemleri çağırabilir kullanabilirsiniz.

  • Üyeleri, sınıf oluşturucu dışında aşırı edemiyor.Aşırı yüklü yöntem oluşturursanız türünde derleme kaydı veya oluşturduğunuzda hata ortaya çıkar SQL Server. Algılama, fazla yüklenmiş yöntem çalışma zamanında türü oluşturulduğunda değil oluşur.Hiçbir zaman çağırılan sürece, fazla yüklenmiş yöntemleri sınıf içinde bulunabilir.Fazla yüklenmiş yöntem çağırma sonra bir hata oluşturulur.

  • Tüm static (veya Shared) üyesi sabitler'olarak bildirilen veya salt okunur olması gerekir. Statik üyesi kesilebilir olamaz.

  • Ile başlayan SQL Server 2008, SqlUserDefinedTypeAttribute.MaxByteSize alan, -1 olarak ayarlanmışsa, seri hale getirilmiş UDT (şu anda 2 GB) büyük bir nesne (LOB) boyut sınırı büyük olabilir. UDT boyutunu belirtilen değerini aşamaz MaxByteSized alan.

Not

Bu sunucu tarafından karşılaştırmaları yapmak için kullanılmaz, ancak isteğe bağlı olarak, uygulayabilirsiniz System.IComparable tek bir yöntem sunar, arabirim CompareTo. Bu, istemci tarafında doğru şekilde karşılaştırmak veya sipariş UDT değerleri uygun olduğu durumlarda kullanılır.

Yerel seri hale getirme

Doğru seri hale getirme öznitelikleri için sizin UDT seçme oluşturmaya çalıştığınız UDT türüne bağlıdır.The Native serialization format utilizes a very simple structure that enables SQL Server to store an efficient native representation of the UDT on disk.The Native format is recommended if the UDT is simple and only contains fields of the following types:

bool, bayt, sbyte, kısa, ushort, Int, uint, Long, ulong, float, çift, SqlByte, SqlInt16, Sqlınt32, SqlInt64, SqlDateTime, SqlSingle, SqlDouble, SqlMoney, SqlBoolean

Yukarıdaki türlerden alanları oluşan için iyi bir aday olan değer türleri Native gibi Biçimlendir structs Visual C#, (veya Structures Visual Basic'te bilinen gibi). Örneğin, bir UDT, ile belirtilen Native seri hale getirme biçimi ile belirtilen başka bir UDT alanının içerebilir Native Format. UDT tanım daha karmaşıktır ve yukarıdaki listede veri türlerini içeren, belirtmelisiniz UserDefined seri hale getirme biçimi yerine.

The Native format has the following requirements:

  • Türü için bir değer belirtmeniz gerekir Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.MaxByteSize.

  • Tüm alanları, seri hale getirilebilir olması gerekir.

  • The System.Runtime.InteropServices.StructLayoutAttribute must be specified as StructLayout.LayoutKindSequential if the UDT is defined in a class and not a structure.This attribute controls the physical layout of the data fields and is used to force the members to be laid out in the order in which they appear.SQL Server uses this attribute to determine the field order for UDTs with multiple values.

Ile tanımlanmış bir UDT örneği için Native seri hale getirme, noktası UDT, bkz: Kullanıcı tanımlı türler kodlama.

UserDefined seri hale getirme

The UserDefined format setting for the Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute öznitelik gives the developer full control over the binary format. Belirtirken Format öznitelik özellik olarak UserDefined, kodunuzda aşağıdakileri yapmanız gerekir:

  • Isteğe bağlı olarak belirtin IsByteOrdered öznitelik özellik. Varsayılan değer false.

  • Belirttiğiniz MaxByteSize özellik Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.

  • Uygulamanız için kod yazma Read ve Write UDT, uygulama tarafından yöntemlerini System.Data.Sql.IBinarySerialize Arabirim.

Ile tanımlanmış bir UDT örneği için UserDefined seri hale getirme, para birimi UDT, bkz: Kullanıcı tanımlı türler kodlama.

Not

Ile başlayan SQL Server 2005 RTM sürüm, kullanıcı tanımlı bir seri hale getirme ile CLR UDTs izin kapsamında olmayan kalıcı olarak hesaplanan sütunlar ve görünümlerin dizine, alanların. Bu gibi durumlarda deterministic olmayan UDT seri hale getirme/serisini kaldırma dizin bozulmasına yol açabilir ve bu nedenle gelen kaldırıldı SQL Server 2005 SP1. Içinde SQL Server 2005 SP1'de, yerel bir seri hale getirme UDT alanları kullanın veya dizine alınması için kalıcı. Herhangi bir varolan dizinleri UDT alanlarında önceki gibi çalışmaya devam etmelidir.

Seri hale getirme öznitelikleri

Öznitelik değeri için bir istemci tarafından seri hale getirme UDTs depolama gösterimini oluşturmak için ve UDTs iletmek için nasıl kullanılır belirler.Belirtmek için gerekli olan Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute UDT oluştururken. The Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute öznitelik indicates that the class is a UDT and specifies the storage for the UDT. Isteğe bağlı olarak belirtebileceğiniz Serializable Ancak, öznitelik SQL Server Bu işlem gerektirmez.

The Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute has the following properties.

  • Format
    Olabilen seri hale getirme biçimi belirtir. Native veya UserDefined, the UDT veri türlerini bağlı.

  • IsByteOrdered
    C Boolean belirleyen değer nasıl SQL Server ikili karşılaştırmalar için UDT gerçekleştirir.

  • IsFixedLength
    Bu UDT tüm örneklerinin aynı uzunlukta olup olmadığını gösterir.

  • MaxByteSize
    Örnek bayt cinsinden en büyük boyutu.Belirtmeniz gerekir MaxByteSize ile UserDefined seri hale getirme biçimi. Belirtilen kullanıcı tanımlı serileştirme ile bir UDT için MaxByteSize UDT, seri hale getirilmiş formundaki toplam boyutunu kullanıcı tarafından tanımlandığı şekilde gösterir. Değeri MaxByteSize 1 için 8000 aralığında olmalıdır veya küme the UDT 8000 (toplam boyutu, LOB boyutu üst sınırı aşamaz) bayttan büyük olduğunu belirtmek için -1 için'. Bir özellik olan bir UDT göz önünde bir dize 10 karakterden ()System.Char). UDT sıralanmış bir BinaryWriter kullanarak, toplam seri hale getirilmiş dizenin 22 bayt boyutudur: Unicode ve UTF-16 karakter başına 2 bayt sayısı karakter ve 2 denetimi tarafından bayt akışı ikili seri hale getirilirken sonucunda oluşan giderlerini çarpımı. Bu nedenle, değerini belirlerken MaxByteSize, seri hale getirilmiş UDT toplam boyutunu düşünülmesi gerekir: ikili biçimde sıralanmış verileri ek seri hale getirme işlemi sonucunda oluşan giderlerini boyutu.

  • ValidationMethodName
    UDT örneklerini doğrulamak için kullandığı yöntem adı.

IsByteOrdered ayarlama

Zaman Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.IsByteOrdered özellik küme için true, ikili seri hale getirilmiş verileri anlambilim bilgi verme için kullanılabilir guaranteeing efekti olan. Bu nedenle, her bir bayt sipariş UDT nesnesi örnek yalnızca bir seri hale getirilmiş gösterimi olabilir.Zaman içinde bir karşılaştırma işlemi gerçekleştirilmez SQL Server aynı karşılaştırma işlemi Yönetilen kodda gerçekleştirilen gibi seri hale getirilmiş bayt sonuçlar aynı olması gerekir. Ayrıca, aşağıdaki özellikleri olan, desteklenen IsByteOrdered olan küme için true:

  • Bu tür bir sütun üzerinde dizin oluşturma yeteneği.

  • Bu tür sütunlara CHECK ve UNIQUE kısıtlamaları yanı sıra, birincil ve yabancı anahtar oluşturma yeteneği.

  • Kullanma olanağı Transact-SQL ORDER BY, GROUP BY ve PARTITION BY yan tümcesi. Bu gibi durumlarda, türü bir ikili gösterimini sırasını belirlemek için kullanılır.

  • Karşılaştırma işleçleri kullanma olanağı Transact-SQL ifadeler.

  • Bu tür hesaplanan sütunlar kalıcı yeteneği.

Dikkat hem Native ve UserDefined seri hale getirme biçimi aşağıdaki karşılaştırma işleçleri desteklemez, IsByteOrdered ayarlamak true:

  • (= Için) eşit

  • Eşit değildir (! =)

  • Büyüktür)>)

  • Küçük)<)

  • Büyük veya eşit)>=)

  • (Küçük veya eşit<=)

null atanabilirlik uygulama

Kullanacağınız sınıf, öznitelikleri, derlemeler için doğru belirtmenin yanı sıra, de null atanabilirlik desteklemelidir.Yüklenen UDTs SQL Server null tanıyan, ancak UDT, boş (null) değer tanıması için sırayla sınıfını uygulamalıdır INullable Arabirim. Daha fazla bilgi ve bir UDT null atanabilirlik uygulamak bir örnek için bkz: Kullanıcı tanımlı türler kodlama.

Dize dönüşümlerini

Dize dönüştürme ve UDT desteklemek için , sağlamanız gereken bir Parse yöntem ve bir ToString Kullanacağınız sınıf yöntemi. The Parse yöntem allows a dize to be converted into a UDT. Olarak bildirilmelidir static (veya Shared Visual Basic) ve bir parametre türü System.Data.SqlTypes.SqlString. Daha fazla bilgi ve nasıl uygulandığı konusunda bir örnek için Parse ve ToString yöntemleri için bkz: Kullanıcı tanımlı türler kodlama.

XML Serialization

UDTs dönüştürme için gelen ve giden desteklemelidir xml XML seri hale getirme anlaşma için uygun tarafından veri türü. The System.Xml.Serialization namespace contains classes that are used to serialize objects into XML format documents or streams.Uygulamak isteyebilirsiniz. xml seri hale getirme kullanılarak IXmlSerializable arabirim özel biçimlendirme XML seri hale getirme ve serisini kaldırma sağlar.

Açık dönüştürme için UDT gelen gerçekleştirme yanında xmlXML seri hale getirme sağlar:

  • Kullanımı Xquery dönüştürme sonrasında UDT örneklerinin değerler üzerinden xml Veri Türü.

  • Parametreli sorgular ve yerel XML Web hizmetleriyle Web yöntemleri UDTs kullanın. SQL Server. Daha fazla bilgi için bkz:Xml veri türü ve CLR kullanıcı tanımlı türler.

  • UDTs toplu yükü XML verilerini almak için kullanın.

  • Tabloların UDT sütunları içeren DataSet seri hale getirilmeye.

UDTs FOR XML sorgularda serileştirilmiş değil.Açıkça her UDT UDTs, XML seri hale getirme görüntüler IÇIN XML sorguyu çalıştırmak için , dönüştürmeniz sütun için xml deyim içinde veri türü. Sütunları da açıkça dönüştürebilir varbinary, varchar, veya nvarchar.