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şturma de bir seçenek olsa da çoğu UDTs için udt yapısı olarak oluşturma, tavsiye edilir.udt tanım ile kaydedilmesi için sırayla UDTs oluşturma belirtimleri için uyması gereken SQL Server.

UDTs uygulama gereksinimleri

Çalıştırmak için SQL Server, sizin udt udt tanımında aşağıdaki gereksinimleri uygulamanız gerekir:

udt belirtmek gerekir Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.Kullanımını System.SerializableAttribute isteğe bağlıdır ancak önerilir.

  • 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, null değerini tanımak için udt çalıştırılan kod için gereklidir.

  • udt genel içermelidir static (veya Shared) Parse yöntem, destekleyen, ayrıştırma ve genel ToString yöntem dönüştürmek için dize halinde temsilini nesnesi.

  • Bir kullanıcı tanımlı seri hale getirme biçimi ile bir udt uygulamak gerekir System.Data.IBinarySerialize arabirim ve sağlayan bir Read ve bir Write yöntem.

  • udt uygulamak gerekir System.Xml.Serialization.IXmlSerializable, ya da tüm ortak alanlar ve özellikler xml seri hale getirilebilir veya ile Süslenmiş olan türleri olmalıdır XmlIgnore standart seri hale getirme geçersiz kılma gerekiyorsa öznitelik.

  • udt nesnesinin yalnızca bir seri hale getirme olması gerekir.Doğrulama başarısız olursa serialize serisini veya yordamları belirli bir nesnenin birden fazla gösterim tanıyacak.

  • SqlUserDefinedTypeAttribute.IsByteOrderedolması gereken true verileri karşılaştırmak içinbayt sırası. IComparable arabirim uygulanmamış ve SqlUserDefinedTypeAttribute.IsByteOrdered olan false, bayt sırası karşılaştırmaları will fail.

  • Bir sınıfta tanımlı udt hiçbir baðýmsýz deðiþken almaz bir genel oluşturucuya sahip olmalıdır.İsteğe bağlı olarak, aşırı yüklü ek sınıf Kurucularını da oluşturabilirsiniz.

  • udt veri öğelerini ortak alanlar veya özellik yordamlarını erişimlere gerekir.

  • Ortak adları 128 karakterden uzun olamaz ve uyması gereken SQL Server içinde tanımlanan gibi tanımlayıcıları kuralları adlandırma Tanımlayıcıları.

  • sql_variant sütun udt örneklerini içeremez.

  • Devralınan üyeleri tarafından erişilebilir Transact-SQL çünkü SQL Server Tür sistemi arasında kalýtým hiyerarþisi haberdarUDTs. Ancak, devralma sınıflarınızı yapı ve yönetilen kod uygulamaları türü, bu tür yöntemleri çağırabilir kullanabilirsiniz.

  • Üyeler, sınıf yapıcısı dışında aşırı yüklenemez.Derleme kaydolun veya türü oluşturduğunuzda yöntem oluşturursanız, herhangi bir hata oluşturulur SQL Server.Aşırı yüklenmiş yöntem olarak algılanmasını çalışma zamanında gerçekleşir saat, türü oluşturulduğunda değil.Hiçbir zaman çağrılan sürece sınıfında aşırı yüklenmiş yöntemler bulunabilir.Aşırı yüklenmiş yöntem çağırma sonra bir hata oluşturulur.

  • Tüm static (veya Shared) üyeleri sabitler olarak bildirilen veya salt okunur olmalıdır.Static üyeler kesilebilir olamaz.

  • If the SqlUserDefinedTypeAttribute.MaxByteSize field is set to -1, the serialized UDT can be as large as the large object (LOB) size limit (currently 2 GB).udt boyutunu belirtilen değeri geçemez MaxByteSized alan.

Not

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

Yerel seri hale getirme

Sağ seri hale getirme öznitelikleri seçmek için sizin udt udt oluşturmaya çalıştığınız 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, byte, sbyte, short, ushort, int, uint, long, ulong, float, double, SqlByte, SqlInt16, SqlInt32, SqlInt64, SqlDateTime, SqlSingle, SqlDouble, SqlMoney, SqlBoolean

Değer, yukarıdaki türlerden alanlarının oluşan için iyi bir aday olan türleri Native biçiminde gibi structs Visual C# içinde (ya da Structures Visual Basic'te, bilinen gibi).Örneğin, birlikte bir udt belirtilen Native seri hale getirme biçimi ile belirtilmiş başka bir udt alan içeriyor olabilir Native biçimi.udt tanım daha karmaşıktır ve yukarıdaki listede yer almayan veri türleri içerir, belirtmeniz gerekir 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.

udt örnek ile tanımlanmış için Native seri hale getirme, içinde noktası udt görmek Kullanıcı tanımlı türler kodlama.

Kullanıcı tanımlı seri hale getirme

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

  • İsteğe bağlı belirtmek IsByteOrdered öznitelik özellik.Varsayılan değer false.

  • Belirtmek MaxByteSize özellik Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.

  • Uygulamak için kod yazma Read ve Write uygulayarak udt yöntemleri System.Data.Sql.IBinarySerialize arabirim.

udt örnek ile tanımlanmış için UserDefined seri hale getirme, içinde döviz udt görmek Kullanıcı tanımlı türler kodlama.

Not

İle başlayan SQL Server 2005 rtm sürüm, kullanıcı tanımlı bir seri hale getirme ile clr UDTs izin sahip kendi alanları dizine parçası olarak hesaplanan sütunlar kalıcı olmayan veya görünümler.Bu gibi durumlarda deterministic olmayan udt seri hale getirme/seri kaldırma Dizin bozulmasına yol açabilir ve bu nedenle sürümünden kaldırılmıştır SQL Server 2005 SP1.De SQL Server 2005 SP1, udt alanları kalıcı olarak dizin için veya yerel seri hale getirme kullanmanız gerekir.udt alanlar üzerinde varolan tüm dizinleri devam etmesi gerektiğine işlev eskisi gibi.

Seri hale getirme öznitelikleri

Öznitelikleri belirlemek için değer olarak seri hale getirme UDTs depolama gösterimini oluşturmasına ve UDTs iletmek için nasıl kullanıldığını istemci.Belirtmek için gerekli olan Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute oluştururken udt.The Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute attribute indicates that the class is a UDT and specifies the storage for the UDT.İsteğe bağlı olarak belirtebileceğiniz Serializable öznitelik, ancak SQL Server bunu gerektirmez.

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

  • Format
    Olabilir seri hale getirme biçimi belirtir Native veya UserDefinedbağlı olarak veri türlerine udt.

  • IsByteOrdered
    A Boolean belirleyen değeri nasıl SQL Server gerçekleştirdiği ikili karşılaştırmaları udt.

  • IsFixedLength
    Tüm bu udt örneklerini aynı uzunlukta olup olmadığını gösterir.

  • MaxByteSize
    En büyük boyutu örnek, bayt cinsinden.Belirtmeniz gerekir MaxByteSize ile UserDefined seri hale getirme biçimi.Belirtilen kullanıcı tanımlı serileştirme ile bir udt için MaxByteSize başvurduğu udt sıralanmış biçimde toplam boyutu gibi tarafından tanımlanan kullanıcı.Değeri MaxByteSize 1 için 8000 aralığında olmalı veya küme udt (en toplam boyutu çok lob boyutu üst sınırı) 8000 bayttan büyük olduğunu belirtmek için-1.10 Karakterden oluşan bir dize özellik udt düşünün (System.Char).udt ne zaman seri seri hale getirilmiş toplam boyutu BinaryWriter kullanarak dize 22 bayt: Unicode utf-16 karakter başına 2 bayt yük sonucunda oluşan ikili akışını seri hale gelen bayt sayısı karakter artı 2 denetim tarafından çarpılır.Bu nedenle, değerini belirlerken MaxByteSize, serileştirilmiş udt toplam boyutunu ele alınması gerekir: boyutu ikili biçimde sıralanmış veri artı tarafından seri hale getirme getireceği ek yük.

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

IsByteOrdered ayarlama

Zaman Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.IsByteOrdered özellik küme truebulunduğunuz devrede etmekten, ikili seri hale getirilmiş verileri için kullanılabilir anlam sıralama bilgileri.Bu nedenle, her örnek bir bayt sipariş udt nesne yalnızca bir seri gösterimi olabilir.Ne zaman karşılaştırma işlemi gerçekleştirilir SQL Server seri hale getirilmiş bayt üzerinde sonuçlar aynı gibi aynı karşılaştırma işlemi gerçekleşmeden yönetilen kod.Aşağıdaki özellikleri de bulunan desteklenen ne zaman IsByteOrdered olarak küme true:

  • Bu türden sütunlarda dizinleri oluşturma yeteneği.

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

  • Kullanma yeteneğini Transact-SQL order by, group by ve bölüm tarafından yan tümceleri.Bu gibi durumlarda, bu tür ikili gösterimini sırasını belirlemek için kullanılır.

  • Karşılaştırma işleçleri kullanma yeteneğini Transact-SQL deyimleri.

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

Dikkat edin hem Native ve UserDefined seri hale getirme biçimi aşağıdaki karşılaştırma işleçleri destekler, IsByteOrdered olarak küme true:

  • Eşit (=) için

  • Eşit değildir (! =)

  • Büyüktür (>)

  • Küçüktür (<)

  • Büyük veya eşittir (>=)

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

Verilebilirliğini uygulama

Öznitelikler, derlemeler için doğru belirtmenin yanı sıra, sınıfınızın de desteklemesi gerekir null atanabilirlik.UDTs yüklenen SQL Server null bilinmektedir, ancak boş değer tanımak udt için sırayla sınıfını uygulamalıdır INullable arabirim.Daha fazla bilgi ve örnek olarak nasıl null atanabilirlik bir udt içinde görmek Kullanıcı tanımlı türler kodlama.

Dize dönüştürme

Dize dönüştürme udt gelen ve desteklemek için sağlamanız gereken bir Parse yöntem ve bir ToString sizin WalkTree yöntemineThe Parse method allows a string 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 uygulanacağını örneği Parse ve ToString yöntemleri için bkz: Kullanıcı tanımlı türler kodlama.

xml seri hale getirme

UDTs birinden diğerine dönüştürme desteği gerekir xml veri türü tarafından uygun anlaşma için xml seri hale getirme.The System.Xml.Serialization namespace contains classes that are used to serialize objects into XML format documents or streams.Uygulamak seçebilirsiniz xml seri hale getirme kullanarak IXmlSerializable ' arabirim sağlayan özel biçimlendirme xml seri hale getirme ve seri kaldırma.

Yanında için udt gelen açıkça dönüştürmeler gerçekleştirme xml, xml seri hale getirme sağlar:

  • Use Xquery dönüştürme sonra udt örneklerin değerlerini üzerinden xml veri türü.

  • UDTs Parametrelendirilmiş sorgularda kullanılan ve Web yöntemleri de yerel xml Web Hizmetleri ile SQL Server.Daha fazla bilgi için bkz: Xml veri türü ve clr kullanıcı tanımlı türler.

  • UDTs almak için kullandığınız bir toplu yükleme xml veri.

  • udt sütunlar içeren tabloları içeren DataSet nesneleri seri hale getirmek.

UDTs for xml sorguları serileştirilir.UDTs xml seri hale getirme işlemi görüntüleyen for xml sorgu yürütmek için açıkça her udt sütun dönüştürmek xml veri türü deyim.Ayrıca açıkça sütunlara dönüştürme varbinary, varchar, veya nvarchar.

Ayrıca bkz.

Diğer Kaynaklar