Aracılığıyla paylaş


Kullanıcı tanımlı türleri'ni kullanma

SQL Server 2005 Kullanıcı tanımlı türler (UDTs) kullanılmaya başlandı.Nesneler ve özel veri yapılarını depolamanıza olanak sağlayarak, SQL tür sistemi UDTs genişletme bir SQL Server Veritabanı. UDTs birden çok veri türlerini içerebilir ve bunları tek bir oluşur geleneksel diğer ad ad veri türlerinden differentiating davranışları olabilir SQL Server Sistem veri türü. UDTs doğrulanabilen kod üreten .NET ortak dil çalışma zamanı tarafından (CLR) desteklenen dillerden birine kullanılarak tanımlanır.Bu, Microsoft Visual C# içerir® ve Visual Basic® .NET.Veri alanları ve .NET sınıf veya yapı özellikleri gösterilir ve davranışlar, sınıf veya yapı yöntemler tarafından tanımlanır.

Bir tablonun sütun tanımının bir değişkeni olarak BIR UDT kullanılabilir bir Transact-SQL toplu iş iş iş, ya bir bağımsız değişkeni olarak bir Transact-SQL işlev veya saklı yordam. UDTs hakkında daha fazla bilgi için bkz: Kullanıcı tanımlı türler CLR ile çalışma.

SQL Server Native Client OLE DB Sağlayıcısı

The SQL Server Native istemci OLE DB sağlayıcı supports UDTs as binary types with meta veriler information, which allows you to manage UDTs as objects. UDT sütunları DBTYPE_UDT sunulur ve bunların metaveri çekirdek OLE DB arabirim üzerinden IColumnRowsetve yeni ISSCommandWithParameters arabirimi.

Not

The IRowsetFind::FindNextRow yöntem does not work with the UDT data type.UDT bir arama sütun tipi kullanılırsa, DB_E_BADCOMPAREOP döndürülür.

Veri bağlama ve Coercions

Aşağıdaki tabloda listelenen verileri kullanarak ile yazdığında oluşan zorlama ve bağlama açıklar bir SQL Server udt. UDT sütunları aracılığıyla sunulan SQL Server Yerel istemci OLE DB sağlayıcı olarak DBTYPE_UDT. Nesneleri olarak tanımlanan kendi türleri yönetebilirsiniz; bu nedenle, uygun şema Satır kümeleri ' meta veriler alabilirsiniz.

Veri türü

Sunucuya

udt

Sunucuya

olmayan UDT

Sunucudan

udt

Sunucudan

olmayan UDT

dbtype_udt

Desteklenir6

Hata1

Desteklenir6

Hata5

dbtype_bytes

Desteklenir6

n/a2

Desteklenir6

n/a2

dbtype_wstr

Desteklenir3,6

n/a2

Desteklenir4,6

n/a2

dbtype_bstr

Desteklenir3,6

n/a2

Desteklenir4

n/a2

dbtype_str

Desteklenir3,6

n/a2

Desteklenir4,6

n/a2

dbtype_iunknown

Desteklenmiyor

n/a2

Desteklenmiyor

n/a2

dbtype_variant (VT_Uİ1 | vt_array)

Desteklenir6

n/a2

Desteklenir4

n/a2

dbtype_variant (vt_bstr)

Desteklenir3,6

n/a2

n/a

n/a2

1Bir sunucu dışındaki yazarsanız, DBTYPE_UDT ile belirtilirICommandWithParameters::SetParameterInfo erişimci türü ise, DBTYPE_UDT deyim çalıştırıldığında hata oluşuyor (DB_E_ERRORSOCCURRED; DBSTATUS_E_BADACCESSOR parametre durumunda).Aksi halde, verileri sunucuya gönderilir, ancak sunucu UDT parametre çubuğundaki veri türüne örtülü hiçbir dönüştürme olduğunu belirten bir hata döndürür.

2Bu konunun kapsam dışındadır.

3 Ikili veriyi onaltılık dize veri dönüştürme oluşur.

4 Ikili veri dizesi onaltılı veri dönüştürme oluşur.

5Doğrulama sırasında erişimci saat oluşturmak veya getirme saat DB_E_ERRORSOCCURRED, DBBINDSTATUS_UNSUPPORTEDCONVERSION için küme bağlantı durumu hata ise oluşabilir.

6BY_REF kullanılabilir.

Giriş parametreleri için ancak çıkış parametresi veya sonuçlar için DBTYPE_NULL ve DBTYPE_EMPTY bağlanabilir.Ne zaman, Giriş parametreleri için bağlı, durum DBSTATUS_S_ISNULL veya DBSTATUS_S_DEFAULT küme olması gerekir.

DBTYPE_UDT da DBTYPE_EMPTY ve DBTYPE_NULL dönüştürülebilir; ancak DBTYPE_NULL ve DBTYPE_EMPTY DBTYPE_UDT için dönüştürülemiyor.Bu, DBTYPE_BYTES ile tutarlıdır.

Not

Yeni bir arabirim için parametre olarak UDTs postalarla kullanılır ISSCommandWithParametershangi devralan Icommandwithparameters.Uygulamalar, bu arabirime kullanmalısınız küme en az DBPROPküme_SQLSERVERPARAMETER özelliknin SSPROP_PARAM_UDT_NAME küme UDT parametreleri için.Bu yapıldıktan değil ICommand::yürütmek DB_E_ERRORSOCCURRED döndürecektir.Bu arabirim ve özellik küme bu konunu sonraki bölümlerinde açıklanmıştır.

Bir kullanıcı tanımlı tür, veriyi tutmak için yeterli büyüklükte değil bir sütuna eklediyseniz ICommand::yürütmek DB_E_ERRORSOCCURRED durumuyla S_OK döndürür.

OLE DB Çekirdek Hizmetleri () tarafından sağlanan veri dönüştürmeIDataConvert) DBTYPE_UDT için uygun değildir.Diğer bir bağlamalar desteklenmiyor.

OLE DB satır kümesi eklemeleri ve değişiklikler

SQL Server Yerel istemci çekirdek OLE DB şema Satır kümeleri çoğunu değiştirir ya da yeni değerler ekler.

PROCEDURE_PARAMETERS şema satır kümesi

Aşağıdaki eklemeleri için PROCEDURE_PARAMETERS şema satır kümesi kümesi yapıldı.

Sütun adı

Tür

Açıklama

ss_udt_catalogname

dbtype_wstr

Üç parçalı ad tanıtıcısı.

ss_udt_schemaname

dbtype_wstr

Üç parçalı ad tanıtıcısı.

ss_udt_name

dbtype_wstr

Üç parçalı ad tanıtıcısı.

ss_udt_assembly_typename

dbtype_wstr

Derleme tam tür adı ve CLR tarafından başvurulan için gereken tüm derleme kimliği içeren adı.

SQL_ASSEMBLIES şema satır kümesi

The SQL Server Native istemci OLE DB sağlayıcı exposes a new sağlayıcı specific şema satır kümesi that describes the registered UDTs. derleme sunucu bir DBTYPE_WSTR belirtilebilir, ancak satır kümesi kümesi mevcut değil.Belirtilmezse, satır kümesi geçerli sunucu için varsayılan.Aşağıdaki SQL_ASSEMBLIES şema satır kümesi kümesi tanımlanan tablo.

Sütun adı

Tür

Açıklama

assembly_catalog

dbtype_wstr

Katalog adını derleme türünü içerir.

assembly_schema

dbtype_wstr

Şema adı ya da sahip adı,'ın derleme türünü içerir.Veritabanı ve şema olmayan derlemeler kapsamına eklenir, ancak bunlar burada yansıtılır, sahibi çözümlenmedi.

assembly_name

dbtype_wstr

Adını derleme türünü içerir.

assembly_id

DBTYPE_Uİ4

Nesne kimliği, derleme türünü içerir.

NOT

dbtype_wstr

Derleme için erişim kapsamını gösteren değer.Değerler, "GÜVENLI", "EXTERNAL_ACCESS" ve "UNSAFE" içerir.

assembly_binary

dbtype_bytes

Derleme ikili gösterimi.

SQL_ASSEMBLIES_ BAĞıMLıLıKLAR şema satır kümesi

SQL Server Yerel istemci OLE DB sağlayıcı, belirtilen sunucu için derleme bağımlılığı açıklayan yeni bir sağlayıcıya özel şema satır kümesi kümesi gösterir.ASSEMBLY_SERVER çağıran bir DBTYPE_WSTR olarak belirtilmiş olabilir, ancak satır kümesi kümesi mevcut değil.Belirtilmezse, satır kümesi geçerli sunucu için varsayılan.Aşağıdaki SQL_ASSEMBLY_DEPENDENCIES şema satır kümesi kümesi tanımlanan tablo.

Sütun adı

Tür

Açıklama

assembly_catalog

dbtype_wstr

Katalog adını derleme türünü içerir.

assembly_schema

dbtype_wstr

Şema adı ya da sahip adı,'ın derleme türünü içerir.Veritabanı ve şema olmayan derlemeler kapsamına eklenir, ancak bunlar burada yansıtılır bir sahip çözümlenmedi.

assembly_id

DBTYPE_Uİ4

Nesne kimliği, derleme.

referenced_assembly_id

DBTYPE_Uİ4

Derlemenin başvurulan nesne kimliği.

SQL_USER_TYPES şema satır kümesi

SQL Server Yeni şema satır kümesi, ne zaman açıklayan SQL_USER_TYPES yerel istemci OLE DB sağlayıcı sunar belirtilen sunucu için kayıtlı olan UDTs eklenir.UDT_SERVER çağıran tarafından bir DBTYPE_WSTR belirtilmesi gerekir, ancak satır kümesi kümesi mevcut değil.SQL_USER_TYPES şema satır kümesi kümesi, aşağıdaki tabloda tanımlanmıştır.

Sütun adı

Tür

Açıklama

udt_catalogname

dbtype_wstr

UDT sütunlarını bu kataloğun adını belirten bir dize UDT tanımlandığı özellik.

udt_schemaname

dbtype_wstr

UDT sütunlar için bu özellik UDT tanımlandığı şemasının adını belirten dize.

udt_name

dbtype_wstr

UDT sınıfını içeren derleme adı.

udt_assembly_typename

dbtype_wstr

Tam tür adı'nı (AQN), tür adı varsa tarafından ad alanı öneki içerir.

SÜTUNSAY Schema satır kümesi

SÜTUNSAY şema satır kümesi kümesi eklemeler aşağıdaki sütunları içerir.

Sütun adı

Tür

Açıklama

ss_udt_catalogname

dbtype_wstr

UDT sütunlarını bu kataloğun adını belirten bir dize UDT tanımlandığı özellik.

ss_udt_schemaname

dbtype_wstr

UDT sütunlar için bu özellik UDT tanımlandığı şemasının adını belirten dize.

ss_udt_name

dbtype_wstr

UDT adı

ss_udt_assembly_typename

dbtype_wstr

Tam tür adı'nı (AQN), tür adı varsa tarafından ad alanı öneki içerir.

OLE DB özellik küme eklemeleri ve değişiklikler

SQL Server Yerel istemci birçok çekirdek OLE DB özellik kümeleri değiştirir ya da yeni değerler ekler.

DBPROPküme_SQLSERVERPARAMETER özelliği küme

OLE DB üzerinden UDTs desteklemek için SQL Server Yerel istemci aşağıdaki değerleri içeren yeni DBPROPSET_SQLSERVERPARAMETER özellik kümesi kullanır.

Name

Tür

Açıklama

ssprop_param_udt_catalogname

dbtype_wstr

Üç parçalı ad tanıtıcısı.

UDT parametreleri için bu özellik katalog adını belirten bir kullanıcı tanımlı tür tanımlandığı dize.

ssprop_param_udt_schemaname

dbtype_wstr

Üç parçalı ad tanıtıcısı.

UDT parametreleri için bu özellik kullanıcı tanımlı tür tanımlandığı şemasının adını belirten dize.

ssprop_param_udt_name

dbtype_wstr

Üç parçalı ad tanıtıcısı.

UDT sütunlar için bu özellik kullanıcı tanımlı tür tek parça ad olarak belirten dize.

SSPROP_PARAM_UDT_NAME zorunludur.SSPROP_PARAM_UDT_CATALOGNAME ve SSPROP_PARAM_UDT_SCHEMANAME isteğe bağlıdır.Özelliklerden birini yanlış belirtilmezse DB_E_ERRORSINCOMMAND döndürdü.SSPROP_PARAM_UDT_CATALOGNAME hem SSPROP_PARAM_UDT_SCHEMANAME belirtilmediği takdirde, sonra UDT aynı veritabanı ve şema içinde tablo olarak tanımlanmış olmalıdır.UDT tanım tablo olarak aynı olan şema değil (ancak aynı veritabanında,) SSPROP_PARAM_UDT_SCHEMANAME belirtilmeli.UDT tanım farklı bir veritabanında ise SSPROP_PARAM_UDT_CATALOGNAME hem SSPROP_PARAM_UDT_SCHEMANAME belirtilmeli.

DBPROPküme_SQLSERVERCOLUMN özelliği küme

Tablolarda desteklemesi için ITableDefinition arabirimSQL Server Yerel istemci DBPROPküme_SQLSERVERCOLUMN özelliği aşağıdaki üç yeni sütun ekler küme.

Name

Açıklama

Tür

Açıklama

ssprop_col_udt_catalogname

udt_catalogname

vt_bstr

Tür DBTYPE_UDT sütunlar için bu kataloğun adını belirten bir dize UDT tanımlandığı özellik.

ssprop_col_udt_schemaname

udt_schemaname

vt_bstr

Tür DBTYPE_UDT sütunlar için bu özellik UDT tanımlandığı şemasının adını belirten dize.

ssprop_col_udt_name

udt_name

vt_bstr

Tür DBTYPE_UDT sütunlar için bu özellik UDT tek bir parça adını belirten dize.Diğer sütun türleri için bu özellik boş bir dize döndürür.

Not

UDTs PROVIDER_TYPES şema satır kümesi kümesi ' görünmüyor.Tüm sütunlar, okuma ve yazma erişimi.

ADO, Açıklama sütununda karşılık gelen girişi'ni kullanarak bu özellikleri için başvuracaktır.

SSPROP_COL_UDTNAME zorunludur.SSPROP_COL_UDT_CATALOGNAME ve SSPROP_COL_UDT_SCHEMANAME isteğe bağlıdır.Varsa özelliklerini hatalı belirtildi DB_E_ERRORSINCOMMAND döndürülür.

SSPROP_COL_UDT_CATALOGNAME kendisi SSPROP_COL_UDT_SCHEMANAME belirtilirse, the UDT aynı veritabanı ve şema içinde tablo olarak tanımlanmış olmalıdır.

UDT tanım tablo olarak aynı olan şema değil (ancak aynı veritabanında,) SSPROP_COL_UDT_SCHEMANAME belirtilmeli.

UDT tanım farklı bir veritabanında hem SSPROP_COL_UDT_CATALOGNAME, hem de SSPROP_COL_UDT_SCHEMANAME belirtilmeli.

OLE DB Arabirim eklemeleri ve değişiklikler

SQL Server Yerel istemci yeni değerler ekler veya OLE DB arabirimleri çekirdek çoğunu değiştirir.

ISSCommandWithParameters arabirim

OLE DB üzerinden UDTs desteklemek için SQL Server Değişiklikleri ve buna ek olarak dahil olmak üzere, çeşitli yerel istemci uygulayan ISSCommandWithParameters arabirim.Bu yeni arabirimin OLE DB Çekirdek arabirimden devralır. Icommandwithparameters.Üç yöntemlerine ek olarak, klasörden devralınan Icommandwithparameters; GetParameterInfo, MapParameterNames, and SetParameterInfo; ISSCommandWithParameters sağlar.GetParameterProperties and SetParameterProperties Sunucu belirli veri türlerini işlemesi için kullanılan yöntem.

Not

The ISSCommandWithParameters arabirim also makes use of the new SSPARAMPROPS structure.

IColumnsRowset arabirim

Ek olarak ISSCommandWithParameters arabirimSQL Server Yerel istemci arama tarafından döndürülen satır kümesi kümesi kümesine yeni değerler de ekler IColumnsRowset::GetColumnRowset yöntem aşağıdaki gibi.

Sütun adı

Tür

Açıklama

dbcolumn_ss_udt_catalogname

dbtype_wstr

UDT katalog adı tanıtıcısı.

dbcolumn_ss_udt_schemaname

dbtype_wstr

UDT şema adı tanıtıcısı.

dbcolumn_ss_udt_name

dbtype_wstr

UDT adı tanıtıcısı.

dbcolumn_ss_assembly_typename

dbtype_wstr

Tür adı ve CLR tarafından başvurulan için gereken tüm derleme kimliği içeren derleme nitelikli adı.

DBCOLUMN_TYPE olduğunda bir sunucu UDT sütun diğer ikili tiplerini birbirinden ayırabilirsiniz küme için yukarıda belirtilen eklenen UDT meta veriler en bakarak DBTYPE_UDT.Bu veri kısmen tamamlandı, sunucu bir UDT türüdür.UDT içinde olmayan sunucu türleri için bu sütunlar her zaman null olarak döndürülür.

SQL Server yerel istemci ODBC sürücüsü

Bir sayıda değişiklik yapıldı mı SQL Server UDTs desteklemek üzere yerel istemci ODBC sürücüsü. The SQL Server Native istemci ODBC driver maps the SQL Server UDT to SQL_SS_UDT driver-specific SQL data type identifier. UDT sütun SQL_SS_UDT surfaced.UDT sütun açıkça başka bir türde bir SQL deyim kullanarak eşleştirmek, ToString or ToXMLString UDT veya aracılığıyla yöntemleriATAMA/DÖNÜŞTÜR işlev, sonuç sütun tipini küme gerçek türü sütun dönüştürüldü için yansıtır.

SQLDescribeParam, SQLColAttribute, SQLGetDescField

Dört yeni sürücüye özgü tanımlayıcısı alanı, sonuç kümesinin UDT sütun veya bir UDT parametresi aracılığıyla getirilecek saklı yordam/parametreli sorgu da için ek bilgi sağlamak için eklenmiş SQLColAttribute, SQLDescribeParam, and SQLGetDescField işlevler.

Eklenen dört yeni tanımlayıcısı alanları 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

Buna ek olarak, üç yeni sürücü belirli sütunları sonucu eklenen küme dönen SQLColumns and SQLProcedureColumns işlevleri bir UDT ya da hakkında ek bilgi sağlamak için neden küme sütun veya UDT parametre.Bu üç yeni sütun SS_UDT_CATALOG_NAME SS_UDT_SCHEMA_NAME ve SS_UDT_ASSEMBLY_TYPE_NAME ' dir.

Desteklenen dönüşümlerini

C veri türleri SQL dönüştürme sırasında SQL_C_CHAR SQL_C_WCHAR ve SQL_C_BINARY tümü için SQL_SS_UDT dönüştürülebilir.Ancak, ikili veri SQL_C_WCHAR ve SQL_C_CHAR SQL veri türleri dönüştürürken bir onaltılık dize için dönüştürülür unutmayın.

SQL veri türleri için C dönüştürme sırasında SQL_C_CHAR SQL_C_WCHAR ve SQL_C_BINARY tümü için SQL_SS_UDT dönüştürülebilir.Ancak, ikili veri SQL_C_WCHAR ve SQL_C_CHAR SQL veri türleri dönüştürürken bir onaltılık dize için dönüştürülür unutmayın.