Aracılığıyla paylaş


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

Birkaç önemli tasarım kararları bir kullanıcı tanımlı türü (udt) yüklenmesi için oluştururken yapmanız gereken Microsoft SQL Server. Gibi bir sınıf oluşturma da bir seçenek olmasına rağmen çoğu UDTs için udt yapısı olarak oluşturma, önerilir. udt tanım ile kayıtlı olması için sırayla UDTs oluşturma belirtimlerine uygun olmalıdır SQL Server.

UDTs uygulama gereksinimleri

Çalışması için SQL Server, sizin udt udt tanımında aşağıdaki koşulları yerine getirmeniz gerekir:

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

  • udt uygulamak gerekir System.Data.SqlTypes.INullablesınıf ya da yapı oluşturarak ortak arabiriminde static( Shared de MicrosoftVisual Basic) Nullyöntemi. SQL ServerNULL-varsayılan olarak bilmektedir. Bu, boş değer kabul edebilmek için udt içinde çalıştırılan kod için gereklidir.

  • udt ortak içermelidir static(veya Shared) Parse, ayrıştırma destekleyen yöntem ve bir kamu ToStringnesne bir dize gösterimini dönüştürme yöntemi.

  • udt kullanıcı tanımlı seri hale getirme biçimi uygulamalısınız System.Data.IBinarySerializearayüz ve sağlamak a Readve bir Writeyöntemi.

  • udt uygulamak gerekir System.Xml.Serialization.IXmlSerializable, ya da tüm ortak alanlar ve özellikler xml seri hale getirilebilir veya ile dekore edilmiş olan türleri olmalıdır XmlIgnorestandart seri hale getirme geçersiz kılma gerekiyorsa özniteliği.

  • Tek bir serileştirme udt nesnesi olması gerekir. Doğrulama başarısız olursa serialize veya serisini rutinleri tanımak belirli bir nesnenin birden fazla gösterimi.

  • SqlUserDefinedTypeAttribute.IsByteOrderedolması gereken truebayt sırası verileri karşılaştırmak için. IComparable arabirimini değil uygulanırsa ve SqlUserDefinedTypeAttribute.IsByteOrderedolan false, bayt sipariş karşılaştırmalar başarısız olur.

  • Sınıfında tanımlanan udt hiçbir bağımsız değişken alır bir genel oluşturucuya sahip olmalıdır. İsteğe bağlı olarak ek aşırı sınıf oluşturucular oluşturabilirsiniz.

  • udt veri öğelerini ortak alanlar ya da özellik yordamlarını maruz gerekir.

  • Ortak adları 128 karakterden uzun olamaz ve uymalıdır SQL Servertanımlandığı gibi tanımlayıcıları kuralları adlandırma Veritabanı tanımlayıcıları.

  • sql_variantsütun udt örneklerini içeremez.

  • Devralınan üyeleri erişilebilir değildir Transact-SQLçünkü SQL Servertürü sistem arasında UDTs devralma hiyerarşisinde farkında değil. Ancak, dersleriniz yapısı ve türü yönetilen kod uygulanmasında gibi yöntemleri çağırabilir devralma kullanabilirsiniz.

  • Üyeler, sınıf kurucusunu dışında aşırı yüklenemez. Eğer aşırı bir yöntem oluşturmak, derleme kaydolun veya türü oluşturduğunuzda hiçbir hata geçirilen SQL Server. Algılama aşırı yönteminin türü oluşturulduğunda değil çalışma zamanında gerçekleşir. Aşırı yüklenmiş yöntemler sürece asla çağırılan sınıfta bulunabilir. Bir kez aşırı yöntemini çağırmak, bir hata oluşturulur.

  • Herhangi bir static(veya Shared) üyeleri sabitler olarak ilan veya salt okunur olmalıdır. Static üyeler kesilebilir olamaz.

  • Eğer SqlUserDefinedTypeAttribute.MaxByteSize-1 olarak ayarlanırsa, serileştirilmiş udt (şu anda 2 gb) büyük nesne (lob) boyutunda çıkabilirler. udt boyutunu belirtilen değeri geçemez MaxByteSizedalan.

[!NOT]

Sunucu tarafından karşılaştırmaları yapmak için kullanılmaz, ancak isteğe bağlı olarak uygulayabileceğiniz System.IComparablearabirimi olan bir tek yöntem sunar, CompareTo. Bu, istemci tarafında doğru karşılaştırmak veya sipariş udt değerleri arzu olduğu durumlarda kullanılır.

Yerel seri hale getirme

Doğru seri hale getirme öznitelikleri seçmek için sizin udt udt oluşturmaya çalıştığınız türüne bağlıdır. NativeSeri hale getirme biçimi kullanan çok basit bir yapı sağlayan SQL Serverbir udt yerel gösterimini verimli diskte saklamak için. NativeBiçimi önerilen basit ve yalnızca udt ise, alanları aşağıdaki türleri içerir:

bool, byte, sbyte, short, ushort, int, uint, long, ulong, float, double, SqlByte, SqlInt16, SqlInt32, SqlInt64, SqlDateTime, SqlSingle, SqlDouble, SqlMoney, SqlBoolean

Değer alanları yukarıdaki türlerden oluşan için iyi adaylar türleri Nativebiçimi, gibi structsVisual C#, (veya Structuresgibi Visual Basic'te bilinmektedir). Örneğin, bir udt belirtilen Nativeseri hale getirme biçimi ile belirtilmiş başka bir UDT bir alan içerebilir Nativebiçimi. udt tanım daha karmaşıktır ve yukarıdaki listede olmayan veri türleri içerir, belirtmeniz gerekir UserDefinedseri hale getirme biçimi yerine.

NativeBiçimi aşağıdaki gereksinimleri vardır:

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

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

  • System.Runtime.InteropServices.StructLayoutAttributeOlarak belirtilmelidir StructLayout.LayoutKindSequentialudt değil bir yapı ile bir sınıf tanımlı mı diye bakar. Bu özellik, veri alanlarının fiziksel yerleşimini denetler ve üyeleri göründükleri sırayla düzenlendiği için zorlamak için kullanılır. SQL ServerBu öznitelik birden fazla değerlerle UDTs alan sırasını belirlemek için kullanır.

İle tanımlanmış bir udt örnek için Nativeseri hale getirme noktası udt görmek, Kullanıcı tanımlı türler kodlama.

UserDefined seri hale getirme

UserDefinedBiçimlendirmek için ayarı Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributeGeliştirici tam denetim ikili biçimde özniteliği sağlar. Belirtirken Formatöznitelik özelliği olarak UserDefined, kodunuzda şunları yapmanız gerekir:

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

  • Belirtmek MaxByteSizeözelliği Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.

  • Uygulamak için kod yazabilir Readve Writeuygulayarak udt yöntemleri System.Data.Sql.IBinarySerializearabirimi.

İle tanımlanmış bir udt örnek için UserDefinedseri hale getirme, döviz udt görmek Kullanıcı tanımlı türler kodlama.

[!NOT]

udt alanları veya dizine eklenmesini kalıcı yerel seri hale getirme kullanmanız gerekir.

Seri hale getirme öznitelikleri

Öznitelikleri seri hale getirme değeri istemciye aktarmasını UDTs için ve UDTs depolama gösterimini oluşturmak için nasıl kullanıldığını belirler. Belirtmek için gerekli Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributeudt oluştururken. Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributeÖzniteliği gösterir sınıfı bir udt ve depolama birimi için udt belirtir. İsteğe bağlı olarak belirtebileceğiniz Serializableözniteliği, her ne kadar SQL ServerBu gerektirmez.

Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributeAşağıdaki özelliklere sahiptir.

  • Format
    Olabilir seri hale getirme biçimi belirtir Nativeya UserDefined, udt veri türlerini bağlı.

  • IsByteOrdered
    A Booleanbelirleyen değer nasıl SQL Serverüzerinde udt ikili karşılaştırma gerçekleştirir.

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

  • MaxByteSize
    Örneği, bayt cinsinden en büyük boyutu. Belirtmelisiniz MaxByteSizeile UserDefinedseri hale getirme biçimi. İle belirtilen kullanıcı tanımlı serileştirme udt için MaxByteSizekullanıcı tarafından tanımlanan udt sıralanmış haliyle toplam boyutunu gösterir. Değeri MaxByteSize1-8000 aralığında olması gerekir veya udt (lob boyutu toplam boyutunu en) 8000 bayttan büyük olduğunu belirtmek için -1 olarak ayarlayın. 10 Karakterden oluşan bir dize özelliği udt düşünün (System.Char). Ne zaman bir BinaryWriter kullanarak udt sıralanmış, Dizgeleştirilmiş toplam boyutu 22 bayt: 2 / Unicode utf-16 karakter, en fazla karakter sayısı artı 2 Denetim bayt ikili akış Dizgeleştirme sonucunda oluşan yük çarpımı bayttır. Bu nedenle, değerini belirlerken MaxByteSize, serileştirilmiş udt toplam boyutunu kabul edilmelidir: boyutu ikili biçimde sıralanmış verileri artı serileştirme tarafından tahakkuk yükü.

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

IsByteOrdered ayarlama

Ne zaman Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.IsByteOrderedözelliği ayarlanır true, sıralı ikili veri, semantik bilgi sipariş için kullanılabileceğini garanti etkisi olan. Böylece, bayt sipariş udt nesnesinin her örneği yalnızca bir serileştirilmiş temsil olabilir. Ne zaman bir karşılaştırma işlemi gerçekleştirilen SQL Serversanki aynı karşılaştırma işlemi, yönetilen kod yer almıştı serileştirilmiş bayt, sonuçları aynı olmalıdır. Aşağıdaki özellikler de vardır ne zaman desteklenen IsByteOrderedayarı true:

  • Bu tür sütunları dizinleri oluşturma yeteneği.

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

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

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

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

Not hem Nativeve UserDefinedseri hale getirme biçimi desteği aşağıdaki karşılaştırma işleçleri ne zaman IsByteOrderedayarı true:

  • Eşittir (=) için

  • Eşit değildir (! =)

  • Büyüktür (>)

  • Az (<)

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

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

Nullability uygulama

Öznitelikler, derlemeler için doğru belirtmenin yanı sıra, sınıf da nullability desteklemesi gerekir. UDTs yüklenen SQL Serverboş tanımayan, ancak boş değer tanımak udt amacıyla, sınıfını uygulamalıdır INullablearabirimi. Daha fazla bilgi ve nullability bir udt uygulamak nasıl bir örnek için bkz: Kullanıcı tanımlı türler kodlama.

Dize dönüştürmeleri

Dize dönüştürme udt gelen ve destek için sağlamanız gerekir bir Parseyöntemi bir ToString, sınıf yöntemi ParseYöntemi bir udt Dönüştürülecek dize verir. Olarak bildirilmelidir static(veya SharedVisual Basic) ve bir parametre türü System.Data.SqlTypes.SqlString. Daha fazla bilgi ve nasıl bir örnek için Parseve ToStringyöntemleri, bakın Kullanıcı tanımlı türler kodlama.

xml Serialization

UDTs desteklemesi gerekir dönüşüm Kime ve kimden xmlveri türü için xml seri hale getirme sözleşmeye uygun olarak. System.Xml.SerializationAd, nesne xml belgeleri veya akışları sokmak için kullanılan sınıfları içerir. Sen-ebilmek seçmek-e uygulamak xmlkullanarak seri hale getirme IXmlSerializablearabirimi, özel biçimlendirme xml seri hale getirme ve seri kaldırma sağlar.

Açık dönüştürmeleri için udt gelen performans ek olarak xml, xml seri hale getirme sağlar:

  • Kullanım Xqueryüzerinde değerler dönüşüm sonra udt örneklerini xmlveri türü.

  • UDTs parametreleştirilmiş sorguları kullanın ve yerel xml Web Hizmetleri ile Web yöntemleri SQL Server. Daha fazla bilgi için, bkz. Handling the xml Data Type and CLR User-Defined Types.

  • UDTs bulk load xml veri almak için kullanın.

  • Tabloların udt sütunları içeren DataSet sokmak.

UDTs for xml sorguları sıralanmış değil. xml serialization UDTs görüntüleyen for xml sorgu yürütmek için açıkça her udt sütun dönüştürmek xmlveri türü select deyimi içinde. Sütunları da açıkça dönüştürebilirsiniz varbinary, varchar, ya nvarchar.

Ayrıca bkz.

Diğer Kaynaklar

Bir kullanıcı tanımlı türü oluşturma