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.
Bu konu, gelişmiş tarih ve saat özelliklerini kullanan bir istemci uygulamasının SQL Server 2008 (10.0.x) öncesi bir SQL Server sürümüyle iletişim kurması ve SQL Server 2008'den önceki (10.0.x) bir SQL Server Yerel İstemcisi sürümüyle derlenen bir istemcinin gelişmiş tarih ve saat özelliklerini destekleyen bir sunucuya komut göndermesi beklenen davranışı açıklar.
İstemci Davranışını Down-Level
SQL Server 2008 'den önceki (10.0.x) SQL Server Native Client sürümünü kullanan istemci uygulamaları, yeni tarih/saat türlerini nvarchar sütunları olarak görür. Sütun içeriği değişmez değer gösterimleridir. Daha fazla bilgi için OLE DB Tarih ve Saat geliştirmeleriiçin
Katalog API'leri, istemciye döndürülen alt düzey veri türü koduyla (örneğin, nvarchar) ve ilişkili alt düzey gösterimiyle (örneğin, uygun değişmez değer biçimi) tutarlı meta veriler döndürür. Ancak, döndürülen veri türü adı gerçek SQL Server 2008 (10.0.x) türü adı olacaktır.
Bir alt düzey istemci uygulaması, şemanın tarih/saat türlerine değiştirildiği SQL Server 2008 (10.0.x) (veya üzeri) sunucusunda çalıştırıldığında, beklenen davranış aşağıdaki gibidir:
| OLE DB istemci türü | SQL Server 2005 türü | SQL Server 2008 (veya üzeri) türü | Sonuç dönüştürme (sunucudan istemciye) | Parametre dönüştürme (istemciden sunucuya) |
|---|---|---|---|---|
| DBTYPE_DBDATE | Tarih saat | Tarih | TAMAM | TAMAM |
| DBTYPE_DBTIMESTAMP | Zaman alanları sıfır olarak ayarlanır. | Zaman alanı sıfır değilse, IRowsetChange dize kesilmesi nedeniyle başarısız olur. | ||
| DBTYPE_DBTIME | Saat(0) | TAMAM | TAMAM | |
| DBTYPE_DBTIMESTAMP | Tarih alanları geçerli tarihe ayarlanır. | Kesirli saniyeler sıfır dışıysa IRowsetChange dize kesilmesi nedeniyle başarısız olur. Tarih yoksayılır. |
||
| DBTYPE_DBTIME | Saat(7) | Başarısız oluyor - geçersiz zaman değişmez değeri. | TAMAM | |
| DBTYPE_DBTIMESTAMP | Başarısız oluyor - geçersiz zaman değişmez değeri. | TAMAM | ||
| DBTYPE_DBTIMESTAMP | Datetime2(3) | TAMAM | TAMAM | |
| DBTYPE_DBTIMESTAMP | Datetime2(7) | TAMAM | TAMAM | |
| DBTYPE_DBDATE | Smalldatetime | Tarih | TAMAM | TAMAM |
| DBTYPE_DBTIMESTAMP | Zaman alanları sıfır olarak ayarlanır. | Zaman alanı sıfır değilse IRowsetChange dize kesilmesi nedeniyle başarısız olur. | ||
| DBTYPE_DBTIME | Saat(0) | TAMAM | TAMAM | |
| DBTYPE_DBTIMESTAMP | Tarih alanları geçerli tarihe ayarlanır. | Kesirli saniyeler sıfır dışıysa IRowsetChange dize kesilmesi nedeniyle başarısız olur. Tarih yoksayılır. |
||
| DBTYPE_DBTIMESTAMP | Datetime2(0) | TAMAM | TAMAM |
Tamam, SQL Server 2005 (9.x) ile çalıştıysa SQL Server 2008 (10.0.x) (veya üzeri) ile çalışmaya devam etmesi gerektiği anlamına gelir.
Yalnızca aşağıdaki yaygın şema değişiklikleri dikkate alınmıştır:
Mantıksal olarak bir uygulamanın yalnızca tarih veya saat değeri gerektirdiği yeni bir tür kullanma. Ancak, ayrı tarih ve saat türleri kullanılamadığından uygulama datetime veya smalldatetime kullanmaya zorlandı.
Ek kesirli saniye duyarlığı veya doğruluğu elde etmek için yeni bir tür kullanma.
Tarih ve saat için tercih edilen veri türü olduğundan datetime2 geçiş yapma.
ICommandWithParameters::GetParameterInfo veya şema satır kümeleri aracılığıyla alınan sunucu meta verilerini kullanarak ICommandWithParameters::SetParameterInfo aracılığıyla parametre türü bilgilerini ayarlayan uygulamalar, kaynak türün dize gösteriminin hedef türün dize gösteriminden daha büyük olduğu istemci dönüştürmeleri sırasında başarısız olur. Örneğin, istemci bağlaması DBTYPE_DBTIMESTAMP kullanıyorsa ve sunucu sütunu tarih ise, SQL Server Yerel İstemcisi değeri "yyyy-dd-mm hh:mm:ss.fff" değerine dönüştürür, ancak sunucu meta verileri
Parametre ve Satır Kümesi Meta Verileri
Bu bölümde, SQL Server 2008 (10.0.x) öncesi bir SQL Server Yerel İstemci sürümüyle derlenen istemciler için parametreler, sonuç sütunları ve şema satır kümeleri için meta veriler açıklanmaktadır.
ICommandWithParameters::GetParameterInfo
DBPARAMINFO yapısı, prgParamInfo parametresi aracılığıyla aşağıdaki bilgileri döndürür:
| Parametre türü | wType | ulParamSize | bPrecision | bScale |
|---|---|---|---|---|
| tarih | DBTYPE_WSTR | 10 | ~0 | ~0 |
| Saat | DBTYPE_WSTR | 8, 10..16 | ~0 | ~0 |
| smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 |
| datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 |
| datetime2 | DBTYPE_WSTR | 19,21..27 | ~0 | ~0 |
| datetimeoffset | DBTYPE_WSTR | 26,28..34 | ~0 | ~0 |
Bu değer aralıklarından bazılarının sürekli olmadığını; örneğin, 8,10..16 içinde 9 eksiktir. Bunun nedeni kesirli duyarlık sıfırdan büyük olduğunda ondalık noktanın eklenmesidir.
IColumnsRowset::GetColumnsRowset
Aşağıdaki sütunlar döndürülür:
| Sütun türü | DBCOLUMN_TYPE | DBCOLUMN_COLUMNSIZE | DBCOLUMN_PRECISION | DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
|---|---|---|---|---|
| tarih | DBTYPE_WSTR | 10 | SIFIR | SIFIR |
| Saat | DBTYPE_WSTR | 8, 10..16 | SIFIR | SIFIR |
| smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 |
| datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 |
| datetime2 | DBTYPE_WSTR | 19,21..27 | SIFIR | SIFIR |
| datetimeoffset | DBTYPE_WSTR | 26,28..34 | SIFIR | SIFIR |
ColumnsInfo::GetColumnInfo
DBCOLUMNINFO yapısı aşağıdaki bilgileri döndürür:
| Parametre Türü | wType | ulColumnSize | bPrecision | bScale |
|---|---|---|---|---|
| tarih | DBTYPE_WSTR | 10 | ~0 | ~0 |
| time(1..7) | DBTYPE_WSTR | 8, 10..16 | ~0 | ~0 |
| smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 |
| datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 |
| datetime2 | DBTYPE_WSTR | 19,21..27 | ~0 | ~0 |
| datetimeoffset | DBTYPE_WSTR | 26,28..34 | ~0 | ~0 |
Şema Satır Kümeleri
Bu bölümde, yeni veri türleri için parametrelere, sonuç sütunlarına ve şema satır kümelerine yönelik meta veriler ele alınmaktadır. Bu bilgiler, SQL Server 2008 (10.0.x) SQL Server Native Client'dan önceki araçlar kullanılarak geliştirilmiş bir istemci sağlayıcınız olmasıdır.
COLUMNS Satır Kümesi
Tarih/saat türleri için aşağıdaki sütun değerleri döndürülür:
| Sütun türü | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | DATETIME_PRECISION |
|---|---|---|---|---|
| tarih | DBTYPE_WSTR | 10 | 20 | SIFIR |
| Saat | DBTYPE_WSTR | 8, 10..16 | 16,20..32 | SIFIR |
| smalldatetime | DBTYPE_DBTIMESTAMP | SIFIR | SIFIR | 0 |
| datetime | DBTYPE_DBTIMESTAMP | SIFIR | SIFIR | 3 |
| datetime2 | DBTYPE_WSTR | 19,21..27 | 38,42..54 | SIFIR |
| datetimeoffset | DBTYPE_WSTR | 26,28..34 | 52, 56..68 | SIFIR |
Satır Kümesini PROCEDURE_PARAMETERS
Tarih/saat türleri için aşağıdaki sütun değerleri döndürülür:
| Sütun türü | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | TYPE_NAME LOCAL_TYPE_NAME |
|---|---|---|---|---|
| tarih | DBTYPE_WSTR | 10 | 20 | tarih |
| Saat | DBTYPE_WSTR | 8, 10..16 | 16,20..32 | Saat |
| smalldatetime | DBTYPE_DBTIMESTAMP | SIFIR | SIFIR | smalldatetime |
| datetime | DBTYPE_DBTIMESTAMP | SIFIR | SIFIR | datetime |
| datetime2 | DBTYPE_WSTR | 19,21..27 | 38,42..54 | datetime2 |
| datetimeoffset | DBTYPE_WSTR | 26,28..34 | 52, 56..68 | datetimeoffset |
Satır Kümesini PROVIDER_TYPES
Tarih/saat türleri için aşağıdaki satırlar döndürülür:
| Tür -> Sütun |
tarih | Saat | smalldatetime | datetime | datetime2 | datetimeoffset |
|---|---|---|---|---|---|---|
| TYPE_NAME | tarih | Saat | smalldatetime | datetime | datetime2 | datetimeoffset |
| DATA_TYPE | DBTYPE_WSTR | DBTYPE_WSTR | DBTYPE_DBTIMESTAMP | DBTYPE_DBTIMESTAMP | DBTYPE_WSTR | DBTYPE_WSTR |
| COLUMN_SIZE | 10 | 16 | 16 | 23 | 27 | 34 |
| LITERAL_PREFIX | ' | ' | ' | ' | ' | ' |
| LITERAL_SUFFIX | ' | ' | ' | ' | ' | ' |
| CREATE_PARAMS | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| IS_NULLABLE | VARIANT_TRUE | VARIANT_TRUE | VARIANT_TRUE | VARIANT_TRUE | VARIANT_TRUE | VARIANT_TRUE |
| CASE_SENSITIVE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE |
| ARANABİLİR | DB_SEARCHABLE | DB_SEARCHABLE | DB_SEARCHABLE | DB_SEARCHABLE | DB_SEARCHABLE | DB_SEARCHABLE |
| UNSIGNED_ATTRIBUTE | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| FIXED_PREC_SCALE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE |
| AUTO_UNIQUE_VALUE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE |
| LOCAL_TYPE_NAME | tarih | Saat | smalldatetime | datetime | datetime2 | datetimeoffset |
| MINIMUM_SCALE | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| MAXIMUM_SCALE | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| GUID | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| TYPELIB | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| SÜRÜM | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR | SIFIR |
| IS_LONG | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE |
| BEST_MATCH | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_TRUE | VARIANT_FALSE | VARIANT_FALSE |
| IS_FIXEDLENGTH | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE | VARIANT_FALSE |
sunucu davranışını Down-Level
SQL Server 2008(10.0.x) sürümünden önceki bir sürümün sunucusuna bağlanıldığında, yeni sunucu türü adlarını (örneğin, ICommandWithParameters::SetParameterInfo veya ITableDefinition::CreateTable ile) kullanma girişimleri DB_E_BADTYPENAME sonuçlanır.
Yeni türler, tür adı kullanılmadan parametrelere veya sonuçlara bağlıysa ve sunucu türünü örtük olarak belirtmek için yeni tür kullanılırsa veya sunucu türünden istemci türüne geçerli bir dönüştürme yoksa, DB_E_ERRORSOCCURRED döndürülür ve DBBINDSTATUS_UNSUPPORTED_CONVERSION Yürüt'te kullanılan erişimci için bağlama durumu olarak ayarlanır.
Bağlantıdaki sunucu sürümü için arabellek türünden sunucu türüne desteklenen bir istemci dönüştürmesi varsa, tüm istemci arabellek türleri kullanılabilir. Bu bağlamda sunucu türü, ICommandWithParameters::SetParameterInfo tarafından belirtilen veya ICommandWithParameters::SetParameterInfo çağrılmadıysa arabellek türü tarafından belirtilen tür anlamına gelir. Başka bir deyişle, DBTYPE_DBTIME2 ve DBTYPE_DBTIMESTAMPOFFSET alt düzey sunucularla veya desteklenen bir sunucu türüne istemci dönüştürme başarılı olursa DataTypeCompatibility=80 ile kullanılabilir. Elbette, sunucu türü yanlışsa, gerçek sunucu türüne örtük bir dönüştürme gerçekleştiremezse sunucu tarafından yine de bir hata bildirilebilir.
SSPROP_INIT_DATATYPECOMPATIBILITY Davranışı
SSPROP_INIT_DATATYPECOMPATIBILITY SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000 olarak ayarlandığında, yeni tarih/saat türleri ve ilişkili meta veriler, Gelişmiş Tarih ve Saat Türleri (OLE DB ve ODBC)için Değişiklikleri Toplu Kopyalama
IRowsetFind için Karşılaştırılabilirlik
Yeni tarih/saat türleri için tüm karşılaştırma işleçlerine izin verilir, çünkü bunlar tarih/saat türleri yerine dize türleri olarak görünür.