Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SQL Server'a yüklenecek kullanıcı tanımlı bir tür (UDT) oluştururken birkaç önemli tasarım kararı vermelisiniz. Çoğu UDT için yapı olarak UDT oluşturulması önerilir, ancak bunu sınıf olarak oluşturmak da bir seçenektir. UDT tanımının SQL Server'a kaydedilebilmesi için UDT oluşturma belirtimlerine uyması gerekir.
UDF'leri uygulama gereksinimleri
SQL Server'da çalıştırmak için UDT'nizin UDT tanımında aşağıdaki gereksinimleri uygulaması gerekir:
UDT, Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributebelirtmelidir.
System.SerializableAttribute kullanımı isteğe bağlıdır ancak önerilir.
UDT, bir genel
static(Visual Basic'teShared)Nullyöntemi oluşturarak sınıf veya yapıdaSystem.Data.SqlTypes.INullablearabirimini uygulamalıdır. SQL Server varsayılan olarak null değerini algılar. Bu, UDT'de yürütülen kodun null değeri tanıyabilmesi için gereklidir.UDT, ayrıştırma işlemini destekleyen bir genel
static(veyaShared)Parseyöntemi ve nesnenin dize gösterimine dönüştürmek için genel birToStringyöntemi içermelidir.Kullanıcı tanımlı serileştirme biçimine sahip bir UDT,
System.Data.IBinarySerializearabirimini uygulamalı ve birReadveWriteyöntemi sağlamalıdır.UDT
System.Xml.Serialization.IXmlSerializableuygulamalıdır veya standart serileştirmenin geçersiz kılınması gerekiyorsa tüm ortak alanlar ve özellikler XML serileştirilebilir veyaXmlIgnoreözniteliğiyle süslenmiş türlerden olmalıdır.Bir UDT nesnesinin yalnızca bir serileştirmesi olmalıdır. Serileştirme veya seri durumdan çıkarma yordamları belirli bir nesnenin birden fazla gösterimini algılarsa doğrulama başarısız olur.
verileri bayt sırasına göre karşılaştırmak için
SqlUserDefinedTypeAttribute.IsByteOrderedtrueolmalıdır.IComparablearabirimi uygulanmamışsa veSqlUserDefinedTypeAttribute.IsByteOrderedfalseise bayt sırası karşılaştırmaları başarısız olur.Bir sınıfta tanımlanan UDT'nin bağımsız değişken içermeyen bir ortak oluşturucuya sahip olması gerekir. İsteğe bağlı olarak daha fazla aşırı yüklenmiş sınıf oluşturucu oluşturabilirsiniz.
UDT, veri öğelerini genel alanlar veya özellik yordamları olarak kullanıma sunmalıdır.
Ortak adlar 128 karakterden uzun olamaz ve
Veritabanı tanımlayıcılarında tanımlanan tanımlayıcılar için SQL Server adlandırma kurallarına uygun olmalıdır. sql_variant sütunlar UDT örnekleri içeremez.
SQL Server tür sistemi UDT'ler arasındaki devralma hiyerarşisinin farkında olmadığından devralınan üyelere Transact-SQL erişilemez. Ancak, sınıflarınızı yapılandırırken devralmayı kullanabilir ve türün yönetilen kod uygulamasında bu tür yöntemleri çağırabilirsiniz.
Sınıf oluşturucu dışında üyeler aşırı yüklenemez. Aşırı yüklenmiş bir yöntem oluşturursanız, derlemeyi kaydederken veya türü SQL Server'da oluştururken hata oluşmaz. Aşırı yüklenmiş yöntemin algılanması, tür oluşturulduğunda değil çalışma zamanında gerçekleşir. Aşırı yüklenmiş yöntemler, hiçbir zaman çağrılmadıkları sürece sınıfında bulunabilir. Aşırı yüklenmiş yöntemi çağırdığınızda bir hata oluşur.
Tüm
static(veyaShared) üyeleri sabit veya salt okunur olarak bildirilmelidir. Statik üyeler değiştirilebilir olamaz.SqlUserDefinedTypeAttribute.MaxByteSizealanı-1olarak ayarlanırsa, serileştirilmiş UDT büyük nesne (LOB) boyut sınırı (şu anda 2 GB) kadar büyük olabilir. UDT'nin boyutuMaxByteSizedalanında belirtilen değeri aşamaz.
Not
Karşılaştırmaları gerçekleştirmek için sunucu tarafından kullanılmasa da, isteğe bağlı olarak CompareTotek bir yöntemi kullanıma sunan System.IComparable arabirimini uygulayabilirsiniz. Bu, istemci tarafında UDT değerlerinin doğru bir şekilde karşılaştırılması veya sıralanması istenen durumlarda kullanılır.
Yerel serileştirme
UDT'niz için doğru serileştirme özniteliklerini seçmek, oluşturmaya çalıştığınız UDT türüne bağlıdır.
Native serileştirme biçimi, SQL Server'ın diskte UDT'nin verimli bir yerel gösterimini depolamasını sağlayan basit bir yapı kullanır. UDT basitse ve yalnızca aşağıdaki türlerdeki alanları içeriyorsa Native biçimi önerilir:
Bu türlerin alanlarından oluşan değer türleri, C# dilinde struct veya Visual Basic .NET'te bilinen Structure gibi Native biçimi için iyi adaylardır. Örneğin, Native serileştirme biçimiyle belirtilen bir UDT, Native biçimiyle de belirtilen başka bir UDT'nin alanını içerebilir. UDT tanımı daha karmaşıksa ve önceki listede bulunmayan veri türleri içeriyorsa, bunun yerine UserDefined serileştirme biçimini belirtmeniz gerekir.
Native biçimi aşağıdaki gereksinimlere sahiptir:
türü
Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.MaxByteSizeiçin bir değer belirtmemelidir.Tüm alanlar serileştirilebilir olmalıdır.
UDT bir yapıda değil de bir sınıfta tanımlanıyorsa
System.Runtime.InteropServices.StructLayoutAttributeStructLayout.LayoutKindSequentialolarak belirtilmelidir. Bu öznitelik, veri alanlarının fiziksel düzenini denetler ve üyeleri göründükleri sırayla yerleştirilmeye zorlamak için kullanılır. SQL Server, birden çok değere sahip UDF'lerin alan sırasını belirlemek için bu özniteliği kullanır.
UserDefined serileştirme
Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute özniteliğinin UserDefined biçimi ayarı, geliştiriciye ikili biçim üzerinde tam denetim sağlar.
Format özniteliği özelliğini UserDefinedolarak belirtirken, kodunuzda aşağıdaki eylemleri gerçekleştirmeniz gerekir:
İsteğe bağlı
IsByteOrderedözniteliği özelliğini belirtin. Varsayılan değerfalse.Microsoft.SqlServer.Server.SqlUserDefinedTypeAttributeMaxByteSizeözelliğini belirtin.System.Data.Sql.IBinarySerializearabirimini uygulayarak UDT içinReadveWriteyöntemlerini uygulamak için kod yazın.
Not
UDT alanlarının dizine alınabilmesi için yerel serileştirme kullanması veya kalıcı olması gerekir.
Serileştirme öznitelikleri
Öznitelikler, UDT'lerin depolama gösterimini oluşturmak ve UDT'leri değere göre istemciye iletmek için serileştirmenin nasıl kullanıldığını belirler. UDT'yi oluştururken Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute belirtmeniz gerekir.
Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute özniteliği, sınıfın bir UDT olduğunu gösterir ve UDT için depolama alanını belirtir. İsteğe bağlı olarak Serializable özniteliğini belirtebilirsiniz, ancak SQL Server bunu gerektirmez.
Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute aşağıdaki özelliklere sahiptir.
Biçim
UDT'nin veri türlerine bağlı olarak Native veya UserDefinedolabilecek serileştirme biçimini belirtir.
IsByteOrdered
SQL Server'ın UDT üzerinde ikili karşılaştırmaları nasıl gerçekleştirdiğini belirleyen Boolean değeri.
IsFixedLength
Bu UDT'nin tüm örneklerinin aynı uzunlukta olup olmadığını gösterir.
MaxByteSize
Bayt cinsinden en büyük örnek boyutu.
UserDefined serileştirme biçimine sahip MaxByteSize belirtmeniz gerekir. Kullanıcı tanımlı serileştirme belirtilen bir UDT için MaxByteSize, UDT'nin kullanıcı tarafından tanımlandığı şekilde serileştirilmiş biçimindeki toplam boyutuna başvurur.
MaxByteSize değeri, 18000aralığında olmalı veya UDT'nin 8.000 bayttan büyük olduğunu belirtmek için -1 olarak ayarlanmalıdır (toplam boyut en büyük LOB boyutunu aşamaz). 10 karakterlik bir dize (System.Char) özelliğine sahip bir UDT düşünün. UDT bir BinaryWriter kullanılarak seri hale getirildiğinde, seri hale getirilmiş dizenin toplam boyutu 22 bayttır: Unicode UTF-16 karakteri başına 2 bayt, maksimum karakter sayısıyla çarpılır ve ikili akışın seri hale getirilmesinden kaynaklanan 2 denetim bayt yükü. Bu nedenle, MaxByteSizedeğerini belirlerken, seri hale getirilmiş UDT'nin toplam boyutu dikkate alınmalıdır: ikili biçimde serileştirilmiş verilerin boyutu ve serileştirmenin neden olduğu ek yük.
ValidationMethodName
UDT örneklerini doğrulamak için kullanılan yöntemin adı.
Isbyteordered'ı ayarlama
Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute.IsByteOrdered özelliği trueolarak ayarlandığında, serileştirilmiş ikili verilerin bilgilerin anlamsal sıralaması için kullanılabileceğini garanti edebilirsiniz. Bu nedenle, bayt sıralı UDT nesnesinin her örneğinin yalnızca bir serileştirilmiş gösterimi olabilir. SQL Server'da serileştirilmiş baytlar üzerinde bir karşılaştırma işlemi gerçekleştirildiğinde, sonuçları yönetilen kodda aynı karşılaştırma işlemi gerçekleşmiş gibi olmalıdır.
IsByteOrdered
trueolarak ayarlandığında aşağıdaki özellikler de desteklenir:
Bu türdeki sütunlarda dizin oluşturma özelliği.
Bu türdeki sütunlarda birincil ve yabancı anahtarların yanı sıra
CHECKveUNIQUEkısıtlamaları oluşturma olanağı.Transact-SQL
ORDER BY,GROUP BYvePARTITION BYyan tümcelerini kullanabilme. Bu durumlarda, sıralamayı belirlemek için türün ikili gösterimi kullanılır.Transact-SQL deyimlerinde karşılaştırma işleçlerini kullanma olanağı.
Bu türdeki hesaplanan sütunları kalıcı hale getirmek.
IsByteOrdered
trueolarak ayarlandığında hem Native hem de UserDefined serileştirme biçimleri aşağıdaki karşılaştırma işleçlerini destekler:
- Eşittir (
=) - Eşit değil (
!=) - Büyüktür (
>) - Küçüktür (
<) - Büyüktür veya eşittir (
>=) - Küçük veya eşittir (
<=)
Null atanabilirlik uygulama
Derlemeleriniz için öznitelikleri doğru belirtmeye ek olarak, sınıfınızın null atanabilirliği de desteklemesi gerekir. SQL Server'a yüklenen UDF'ler null algılamalıdır, ancak UDT'nin null değeri tanıması için sınıfın INullable arabirimini uygulaması gerekir. Daha fazla bilgi ve UDT'de null atanabilirlik uygulama örneği için bkz. ADO.NETile kullanıcı tanımlı türler oluşturma
Dize dönüştürmeleri
UDT'ye ve UDT'den dize dönüştürmeyi desteklemek için sınıfınızda bir Parse yöntemi ve ToString yöntemi sağlamanız gerekir.
Parse yöntemi bir dizenin UDT'ye dönüştürülmesini sağlar.
static (veya Visual Basic'te Shared) olarak bildirilmeli ve System.Data.SqlTypes.SqlStringtüründe bir parametre almalıdır. daha fazla bilgi ve
XML serileştirme
UDF'ler XML serileştirme sözleşmesine uygun olarak xml veri türüne dönüştürmeyi desteklemelidir.
System.Xml.Serialization ad alanı, nesneleri XML biçiminde belgeler veya akışlar halinde serileştirmek için kullanılan sınıfları içerir. XML serileştirme ve seri durumdan çıkarma için özel biçimlendirme sağlayan IXmlSerializable arabirimini kullanarak xml serileştirme uygulamayı seçebilirsiniz.
XMLUDT'den
xml veri türüne dönüştürüldikten sonra UDT örneklerinin değerleri üzerinde XQuery kullanın.
SQL Server'da Yerel XML Web Hizmetleri ile parametreli sorgularda ve Web yöntemlerinde UDT'leri kullanın.
XML verilerinin toplu yükünü almak için UDF'leri kullanın.
UDT sütunları içeren tablolar içeren DataSet'leri seri hale getirme.
UDF'ler FOR XML sorgularında serileştirilmemiştir. UDF'lerin XML serileştirmesini görüntüleyen bir FOR XML sorgusu yürütmek için, her UDT sütununu açıkça SELECT deyimindeki xml veri türüne dönüştürün. Ayrıca sütunları açıkça varbinary, varcharveya nvarchardönüştürebilirsiniz.