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.
See Also