Aracılığıyla paylaş


SQL Server Native İstemcisinde User-Defined Türleri Kullanımı

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAnalitik Platform Sistemi (PDW)

Önemli

SQL Server Native Client (SNAC) ile birlikte gönderilmez:

  • SQL Server 2022 (16.x) ve sonraki sürümleri
  • SQL Server Management Studio 19 ve sonraki sürümleri

YENI uygulama geliştirme için SQL Server Yerel İstemcisi (SQLNCLI veya SQLNCLI11) ve SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) önerilmez.

Yeni projeler için aşağıdaki sürücülerden birini kullanın:

SQL Server Veritabanı Altyapısı'nın (sürüm 2012 ile 2019 arasında) bir bileşeni olarak gelen SQLNCLI için, Destek Yaşam Döngüsü özel durumukonusuna bakın.

SQL Server 2005 (9.x), kullanıcı tanımlı tipleri (UDT'ler) tanıttı. UDT'ler, nesneleri ve özel veri yapılarını bir SQL Server veritabanında depolamanıza olanak tanıyarak SQL tür sistemini genişletir. UDF'ler birden çok veri türü içerebilir ve davranışları olabilir ve bunları tek bir SQL Server sistem veri türünden oluşan geleneksel diğer ad veri türlerinden ayırt edebilir. UDT'ler, doğrulanabilir kod üreten .NET ortak dil çalışma zamanı (CLR) tarafından desteklenen dillerden herhangi biri kullanılarak tanımlanır. Buna C# ve Visual Basic .NET dahildir. Veriler, .NET sınıfının veya yapısının alanları ve özellikleri olarak ortaya çıkar ve davranışlar sınıfın veya yapının yöntemleriyle tanımlanır.

UDT, bir tablonun sütun tanımı, Transact-SQL bir partide değişken olarak veya Transact-SQL fonksiyonunun veya depolanan prosedürün argümanı olarak kullanılabilir.

SQL Server Yerel İstemci OLE DB Sağlayıcısı

SQL Server Native Client OLE DB sağlayıcısı, UDT'leri meta veri bilgisine sahip ikili tipler olarak destekler; bu da UDT'leri nesne olarak yönetmenize olanak tanır. UDT sütunları DBTYPE_UDT olarak görünür ve meta verileri, çekirdek OLE DB arayüzü IColumnRowset ve yeni ISSCommandWithParameters arayüzü aracılığıyla ortaya çıkar.

Uyarı

IRowsetFind::FindNextRow yöntemi UDT veri tipiyle çalışmaz. DB_E_BADCOMPAREOP UDT arama sütunu tipi olarak kullanılırsa döner.

Veri Bağlamaları ve Zorlamalar

Aşağıdaki tablo, listelenen veri türleri SQL Server UDT ile kullanılırken ortaya çıkan bağlama ve zorlamayı açıklar. UDT sütunları, SQL Server Native Client OLE veritabanı sağlayıcısı aracılığıyla DBTYPE_UDT olarak sunulur. Meta veriyi uygun şema satır kümeleri üzerinden alabilirsiniz, böylece kendi tanımlı türlerinizi nesne olarak yönetebilirsiniz.

Veri türü Sunucuya

UDT
Sunucuya

UDT dışı
Sunucudan

UDT
Sunucudan

UDT dışı
DBTYPE_UDT Desteklenen 6 Hata 1 Desteklenen 6 Hata 5
DBTYPE_BYTES Desteklenen 6 Yok 2 Desteklenen 6 Yok 2
DBTYPE_WSTR Desteklenenler 3,6 Yok 2 Desteklenenler 4,6 Yok 2
DBTYPE_BSTR Desteklenenler 3,6 Yok 2 Desteklenen 4 Yok 2
DBTYPE_STR Desteklenenler 3,6 Yok 2 Desteklenenler 4,6 Yok 2
DBTYPE_IUNKNOWN Desteklenmez Yok 2 Desteklenmez Yok 2
DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) Desteklenen 6 Yok 2 Desteklenen 4 Yok 2
DBTYPE_VARIANT (VT_BSTR) Desteklenenler 3,6 Yok 2 Mevcut Değil Yok 2

1ICommandWithParameters::SetParameterInfo ile DBTYPE_UDT dışında bir sunucu türü belirtilirse ve erişici tipi DBTYPE_UDT ise, ifade yürütüldüğünde hata oluşur (DB_E_ERRORSOCCURRED; parametre durumu DBSTATUS_E_BADACCESSOR). Aksi takdirde veri sunucuya gönderilir, ancak sunucu UDT'den parametrenin veri tipine örtük bir dönüşüm olmadığını belirten bir hata döndürür.

2Bu konunun kapsamının ötesinde.

3 Altaltıgen diziden ikili veriye veri dönüşümü gerçekleşir.

4 İkili veriden altıgen dizeme veri dönüşümü gerçekleşir.

5Doğrulama, erişimci oluşturma zamanında veya getirme sırasında hata DB_E_ERRORSOCCURRED ve bağlama durumu DBBINDSTATUS_UNSUPPORTEDCONVERSION olarak ayarlandığında gerçekleşebilir.

6BY_REF kullanılabilir.

DBTYPE_NULL ve DBTYPE_EMPTY giriş parametreleri için sınırlı olabilir, ancak çıktı parametreleri veya sonuçlar için sınırlı değildir. Giriş parametreleri için sınırlıyken, durum DBSTATUS_S_ISNULL veya DBSTATUS_S_DEFAULT olarak ayarlanmalıdır.

DBTYPE_UDT ayrıca DBTYPE_EMPTY ve DBTYPE_NULL'ye dönüştürülebilir, ancak DBTYPE_NULL ve DBTYPE_EMPTY DBTYPE_UDT'ye dönüştürülemez. Bu DBTYPE_BYTES ile tutarlıdır.

Uyarı

UDT'leri parametre olarak işlemek için yeni bir arayüz kullanılır; ISSCommandWithParameters, ICommandWithParameters'dan miras alınır. Uygulamalar, UDT parametreleri için DBPROPSET_SQLSERVERPARAMETER özellik kümesinin en az SSPROP_PARAM_UDT_NAME ayarını ayarlamak için bu arayüzü kullanmak zorundadır. Eğer bu yapılmazsa, ICommand::Execute DB_E_ERRORSOCCURRED döndürecektir. Bu arayüz ve özellik kümesi, bu konunun ilerleyen bölümlerinde açıklanacaktır.

Eğer kullanıcı tanımlı bir tip tüm verilerini barındıracak kadar büyük olmayan bir sütuna eklenirse, ICommand::Execute DB_E_ERRORSOCCURRED durumuyla S_OK döndürecektir.

OLE DB çekirdek hizmetleri (IDataConvert) tarafından sağlanan veri dönüşümleri DBTYPE_UDT için geçerli değildir. Başka hiçbir bağlama desteklenmemektedir.

OLE DB Sıra Seti Eklemeleri ve Değişiklikleri

SQL Server Native Client, birçok temel OLE DB şema satır kümesine yeni değerler veya değişiklikler ekler.

PROCEDURE_PARAMETERS Şema Rowset

PROCEDURE_PARAMETERS şema sıra setine aşağıdaki eklemeler yapılmıştır.

Sütun adı Türü Description
SS_UDT_CATALOGNAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.
SS_UDT_SCHEMANAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.
SS_UDT_NAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.
SS_UDT_ASSEMBLY_TYPENAME DBTYPE_WSTR Assembly Nitelikli Adı, tip adını ve CLR tarafından referans alınması gereken tüm montaj tanımlamalarını içerir.

SQL_ASSEMBLIES Şema Rowset

SQL Server Native Client OLE DB sağlayıcısı, kayıtlı UDT'leri tanımlayan yeni bir sağlayıcıya özgü şema satır seti sunar. ASSEMBLY sunucusu bir DBTYPE_WSTR olarak belirtilebilir, ancak satır kümesinde bulunmaz. Belirtilmediyse, satır kümesi mevcut sunucuya varsayılan olarak geçer. SQL_ASSEMBLIES şema satır kümesi aşağıdaki tabloda tanımlanmıştır.

Sütun adı Türü Description
ASSEMBLY_CATALOG DBTYPE_WSTR Tipi içeren montajın katalog adı.
ASSEMBLY_SCHEMA DBTYPE_WSTR Tipi içeren montajın şema adı veya sahibi adı. Montajlar veritabanı kapsamında olup şema ile değil, ancak yine de bir sahibine sahiptir ve bu burada da yansıtılır.
ASSEMBLY_NAME DBTYPE_WSTR Tipi içeren montajın adı.
ASSEMBLY_ID DBTYPE_UI4 Tipi içeren montajın nesne kimliği.
PERMISSION_SET DBTYPE_WSTR Montajın erişim kapsamını gösteren bir değer. Değerler arasında "GÜVENLİ", "EXTERNAL_ACCESS" ve "GÜVENLİS" yer alır.
ASSEMBLY_BINARY DBTYPE_BYTES Meclisin ikili temsili.

SQL_ASSEMBLIES_ BAĞIMLILIK şeması Rowset

SQL Server Native Client OLE DB sağlayıcısı, belirli bir sunucu için assembly bağımlılıklarını tanımlayan yeni bir sağlayıcıya özgü şema satırı sunar. ASSEMBLY_SERVER, arayan tarafından DBTYPE_WSTR olarak belirtilebilir, ancak satır kümesinde bulunmaz. Belirtilmediyse, satır kümesi mevcut sunucuya varsayılan olarak geçer. SQL_ASSEMBLY_DEPENDENCIES şema satır kümesi aşağıdaki tabloda tanımlanmıştır.

Sütun adı Türü Description
ASSEMBLY_CATALOG DBTYPE_WSTR Tipi içeren montajın katalog adı.
ASSEMBLY_SCHEMA DBTYPE_WSTR Tipi içeren montajın şema adı veya sahibi adı. Montajlar veritabanına göre kapsamlı olsa da, şema ile değil, yine de bir sahibine sahiptir ve bu burada da yansıtılır.
ASSEMBLY_ID DBTYPE_UI4 Montajın nesne kimliği.
REFERENCED_ASSEMBLY_ID DBTYPE_UI4 Referans edilen montajın nesne kimliği.

SQL_USER_TYPES Şema Rowset

SQL Server Native Client OLE DB sağlayıcısı, belirli bir sunucu için kayıtlı UDT'lerin ne zaman eklendiğini açıklayan yeni şema satırı SQL_USER_TYPES'yi ortaya çıkarır. UDT_SERVER, arayan tarafından DBTYPE_WSTR olarak belirtilmeli ancak satır kümesinde bulunmamalıdır. SQL_USER_TYPES şema satır kümesi aşağıdaki tabloda tanımlanmıştır.

Sütun adı Türü Description
UDT_CATALOGNAME DBTYPE_WSTR UDT sütunları için bu özellik, UDT'nin tanımlandığı kataloğun adını belirten bir dizidir.
UDT_SCHEMANAME DBTYPE_WSTR UDT sütunları için bu özellik, UDT'nin tanımlandığı şema adını belirten bir dizidir.
UDT_NAME DBTYPE_WSTR UDT sınıfını içeren montajın adı.
UDT_ASSEMBLY_TYPENAME DBTYPE_WSTR Tam tip adı (AQN), varsa isim alanı ile birlikte tür adı da içerir.

COLUMNS şema satırları

COLUMNS şema satır setine eklenen eklemeler aşağıdaki sütunları içerir.

Sütun adı Türü Description
SS_UDT_CATALOGNAME DBTYPE_WSTR UDT sütunları için bu özellik, UDT'nin tanımlandığı kataloğun adını belirten bir dizidir.
SS_UDT_SCHEMANAME DBTYPE_WSTR UDT sütunları için bu özellik, UDT'nin tanımlandığı şema adını belirten bir dizidir.
SS_UDT_NAME DBTYPE_WSTR UDT'nin adı
SS_UDT_ASSEMBLY_TYPENAME DBTYPE_WSTR Tam tip adı (AQN), varsa isim alanı ile birlikte tür adı da içerir.

OLE DB Mülk Seti Eklemeleri ve Değişiklikleri

SQL Server Native Client, birçok temel OLE DB özellik setine yeni değerler veya değişiklikler ekler.

DBPROPSET_SQLSERVERPARAMETER Özellik Seti

OLE DB üzerinden UDT'leri desteklemek için SQL Server Native Client aşağıdaki değerleri içeren yeni DBPROPSET_SQLSERVERPARAMETER özellik kümesini uygular.

İsim Türü Description
SSPROP_PARAM_UDT_CATALOGNAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.

UDT parametreleri için bu özellik, kullanıcı tanımlı türünün tanımlandığı kataloğun adını belirten bir dizidir.
SSPROP_PARAM_UDT_SCHEMANAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.

UDT parametreleri için, bu özellik, kullanıcı tanımlı türünün tanımlandığı şema adını belirten bir dizidir.
SSPROP_PARAM_UDT_NAME DBTYPE_WSTR Üç bölümden oluşan isim tanımlayıcısı.

UDT sütunları için bu özellik, kullanıcı tanımlı türün tek parça adını belirten bir dizidir.

SSPROP_PARAM_UDT_NAME zorunludur. SSPROP_PARAM_UDT_CATALOGNAME ve SSPROP_PARAM_UDT_SCHEMANAME isteğe bağlıdır. Özelliklerden herhangi biri yanlış belirtilirse DB_E_ERRORSINCOMMAND geri gönderilir. Eğer hem SSPROP_PARAM_UDT_CATALOGNAME hem de SSPROP_PARAM_UDT_SCHEMANAME belirtilmemişse, UDT tablo ile aynı veritabanı ve şemada tanımlanmalıdır. Eğer UDT tanımı tablo ile aynı şemada değilse (ancak aynı veritabanındaysa), SSPROP_PARAM_UDT_SCHEMANAME belirtilmelidir. Eğer UDT tanımı farklı bir veritabanındaysa, hem SSPROP_PARAM_UDT_CATALOGNAME hem de SSPROP_PARAM_UDT_SCHEMANAME belirtilmelidir.

DBPROPSET_SQLSERVERCOLUMN Özellik Kümesi

ITableDefinition arayüzünde tablo oluşturulmasını desteklemek için SQL Server Native Client aşağıdaki üç yeni sütunu DBPROPSET_SQLSERVERCOLUMN özellik setine ekler.

İsim Description Türü Description
SSPROP_COL_UDT_CATALOGNAME UDT_CATALOGNAME VT_BSTR DBTYPE_UDT tipindeki sütunlar için bu özellik, UDT'nin tanımlandığı kataloğun adını belirten bir dizidir.
SSPROP_COL_UDT_SCHEMANAME UDT_SCHEMANAME VT_BSTR DBTYPE_UDT tipli sütunlar için bu özellik, UDT'nin tanımlandığı şemanın adını belirten bir dizidir.
SSPROP_COL_UDT_NAME UDT_NAME VT_BSTR DBTYPE_UDT tipindeki sütunlar için bu özellik, UDT'nin tek parça adını belirten bir dizidir. Diğer sütun türleri için ise bu özellik boş bir diziyi döndürür.

Uyarı

UDT'ler PROVIDER_TYPES şema satır setinde görünmez. Tüm sütunlarda okuma ve yazma erişimi vardır.

ADO, bu özelliklere Açıklama sütunundaki ilgili girişi kullanarak başvuracaktır.

SSPROP_COL_UDTNAME zorunludur. SSPROP_COL_UDT_CATALOGNAME ve SSPROP_COL_UDT_SCHEMANAME isteğe bağlıdır. Özelliklerden herhangi biri yanlış belirtilirse, DB_E_ERRORSINCOMMAND geri gönderilir.

Ne SSPROP_COL_UDT_CATALOGNAME ne de SSPROP_COL_UDT_SCHEMANAME belirtilmemişse, UDT tablo ile aynı veritabanı ve şemada tanımlanmalıdır.

UDT tanımı tablo ile aynı şemada değilse (ancak aynı veritabanındaysa), SSPROP_COL_UDT_SCHEMANAME belirtilmelidir.

UDT tanımı farklı bir veritabanındaysa, hem SSPROP_COL_UDT_CATALOGNAME hem de SSPROP_COL_UDT_SCHEMANAME belirtilmelidir.

OLE DB Arayüz Eklemeleri ve Değişiklikleri

SQL Server Native Client, birçok temel OLE DB arayüzüne yeni değerler veya değişiklikler ekler.

ISSCommandWithParameters Arayüzü

OLE DB üzerinden UDT'leri desteklemek için SQL Server Native Client ISSCommandWithParameters arayüzünün eklenmesi de dahil olmak üzere bir dizi değişiklik uygular. Bu yeni arayüz, çekirdek OLE veritabanı arayüzü ICommandWithParameters'dan miras alınır. ICommandWithParameters'dan miras alınan üç yönteme ek olarak; GetParameterInfo, MapParameterNames ve SetParameterInfo; ISSCommandWithParameters, sunucuya özgü veri türlerini işlemek için kullanılan GetParameterProperties ve SetParameterProperties yöntemlerini sağlar.

Uyarı

ISSCommandWithParameters arayüzü de yeni SSPARAMPROPS yapısını kullanır.

IColumnsRowset Arayüzü

ISSCommandWithParameters arayüzüne ek olarak, SQL Server Native Client ayrıca IColumnsRowset::GetColumnRowset metodunu çağırarak geri dönen satır kümesine yeni değerler ekler; bunlar arasında aşağıdakiler de bulunur.

Sütun Adı Türü Description
DBCOLUMN_SS_UDT_CATALOGNAME DBTYPE_WSTR Bir UDT katalog adı tanımlayıcısı.
DBCOLUMN_SS_UDT_SCHEMANAME DBTYPE_WSTR Bir UDT şema isim tanımlayıcısı.
DBCOLUMN_SS_UDT_NAME DBTYPE_WSTR Bir UDT isim tanımlayıcısı.
DBCOLUMN_SS_ASSEMBLY_TYPENAME DBTYPE_WSTR Montaj nitelikli isim, tip adını ve CLR tarafından referans alınması gereken tüm montaj tanımlamalarını içerir.

Yukarıda belirtilen eklenmiş UDT meta verilerine bakarak, DBCOLUMN_TYPE DBTYPE_UDT olarak ayarlandığında, bir sunucu UDT sütununu diğer ikili tiplerden ayırt edebilirsiniz. Eğer bu veri kısmen tamamlanmışsa, sunucu tipi UDT'dir. UDT olmayan sunucu türleri için bu sütunlar her zaman NULL olarak döner.

SQL Server Yerel İstemci ODBC Sürücüsü

SQL Server Native Client ODBC sürücüsünde UDT'leri desteklemek için bir dizi değişiklik yapılmıştır. SQL Server Native Client ODBC sürücüsü, SQL Server UDT'yi sürücüye özgü SQL_SS_UDT SQL veri tipi tanımlayıcısına eşler. UDT kolonları SQL_SS_UDT olarak yüzeylendirilir. Bir UDT sütununu UDT'nin ToString veya ToXMLString yöntemlerini kullanarak veya CAST/CONVERT fonksiyonuyla SQL ifadesinde başka bir tipe açıkça eşlerseniz, sonuç kümesindeki sütunun türü, sütün dönüştürülen gerçek tipi yansıtır

SQLColAttribute, SQLDescribeParam, SQLGetDescField

Dört yeni sürücüye özgü tanımlayıcı alan, sonuç kümesinin UDT sütunu veya saklanan prosedür/parametreleştirilmiş sorgu UDT parametresi için SQL Attribute, SQLDescribeParam ve SQLGetDescField fonksiyonları aracılığıyla alınacak ek bilgi sağlamak amacıyla eklenmiştir.

Eklenen dört yeni tanımlayıcı alanı SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME ve SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME'dir.

SQLColumns, SQLProcedureColumns

Ayrıca, SQLColumns ve SQLProcedureColumns fonksiyonlarından geri dönen sonuç kümesine üç yeni sürücüye özel sütun eklenerek UDT sonuç seti sütunu veya UDT parametresi hakkında ek bilgi sağlanır. Bu üç yeni sütun SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME ve SS_UDT_ASSEMBLY_TYPE_NAME'dir.

Desteklenen Dönüşümler

SQL'den C veri tiplerine dönüştürülürken, SQL_C_WCHAR, SQL_C_BINARY ve SQL_C_CHAR hepsi SQL_SS_UDT'ye dönüştürülebilir. Ancak, ikili verilerin SQL_C_WCHAR ve SQL_C_CHAR SQL veri tiplerinden dönüştürüldüğünde altıgen bir diziye dönüştürüldüğünü unutmayın.

C'den SQL veri tiplerine dönüştürülürken, SQL_C_WCHAR, SQL_C_BINARY ve SQL_C_CHAR hepsi SQL_SS_UDT'ye dönüştürülebilir. Ancak, ikili verilerin SQL_C_WCHAR ve SQL_C_CHAR SQL veri tiplerinden dönüştürüldüğünde altıgen bir diziye dönüştürüldüğünü unutmayın.

Ayrıca Bkz.

SQL Server Yerel İstemci Özellikleri
ISSCommandWithParameters (OLE DB)