共用方式為


從伺服器到客戶端執行的轉換

本主題描述在 SQL Server 2008(或更新版本)與以 SQL Server Native Client OLE DB 撰寫的用戶端應用程式之間執行的日期/時間轉換。

轉換次數

下表描述傳回給客戶端的類型與系結中型別之間的轉換。 針對輸出參數,如果已呼叫 ICommandWithParameters::SetParameterInfo,且 pwszDataSourceType 中指定的類型與伺服器上的實際類型不符,伺服器將會執行隱含轉換,而傳回給用戶端的類型將會符合透過 ICommandWithParameters::SetParameterInfo 指定的類型。 當伺服器的轉換規則與本主題所述的轉換規則不同時,這可能會導致非預期的轉換結果。 例如,必須提供預設日期時,SQL Server 會使用 1900-1-1,而不是 1899-12-30。

自->

寄件者
日期 DBDATE DBTIME DBTIME2 DBTIMESTAMP 資料庫時間戳偏移量 FILETIME 位元組 變體 SSVARIANT BSTR STR WSTR
日期 1,7 還行 - - 1 1,3 1,7 - 確定(VT_BSTR) 還行 還行 4 4
時間 5,6,7 - 9 還行 6 3,6 5,6 - 確定(VT_BSTR) 還行 還行 4 4
Smalldatetime 7 8 9,10 10 還行 3 7 - 7 (VT_DATE) 還行 還行 4 4
日期時間 5,7 8 9,10 10 還行 3 7 - 7 (VT_DATE) 還行 還行 4 4
Datetime2 5,7 8 9,10 10 7 3 5,7 - 確定(VT_BSTR) 還行 還行 4 4
Datetimeoffset 5,7,11 8,11 9,10,11 10,11 7,11 還行 5,7,11 - 確定(VT_BSTR) 還行 還行 4 4
Char、Varchar、

Nchar、Nvarchar
7, 13 12 12,9 12 12 12 7,13 N/A N/A N/A N/A N/A N/A
Sql_variant

(日期時間)
7 8 9,10 10 還行 3 7 - 7(VT_DATE) 還行 還行 4 4
Sql_variant

(smalldatetime)
7 8 9,10 10 還行 3 7 - 7(VT_DATE) 還行 還行 4 4
Sql_variant

(日期)
1,7 還行 2 2 1 1,3 1,7 - 確定(VT_BSTR) 還行 還行 4 4
Sql_variant

(時間)
5,6,7 2 6 還行 6 3,6 5,6 - 確定(VT_BSTR) 還行 還行 4 4
Sql_variant

(datetime2)
5,7 8 9,10 10 還行 3 5,7 - 確定(VT_BSTR) 還行 還行 4 4
Sql_variant

(datetimeoffset)
5,7,11 8,11 9,10,11 10,11 7,11 還行 5,7,11 - 確定(VT_BSTR) 還行 還行 4 4

符號的索引鍵

象徵 意義
還行 不需要轉換。
- 不支援轉換。 如果在呼叫 IAccessor::CreateAccessor 時驗證系結,DBBINDSTATUS_UPSUPPORTEDCONVERSION會在 rgStatus 中傳回。 延遲存取子驗證時,會設定DBSTATUS_E_BADACCESSOR。
1 時間欄位會設定為零。
2 已設定DBSTATUS_E_CANTCONVERTVALUE。
3 時區設定為零。
4 如果客戶端緩衝區不夠大,則會設定DBSTATUS_S_TRUNCATED。 當伺服器類型包含小數秒時,結果字串中的位數完全符合伺服器類型的小數字數。
5 會忽略秒數或小數秒的截斷。
6 除非來源是字串時間常值,而且目的地是DBTYPE_DATE,否則日期會設定為目前的日期。 在此情況下,會使用 1899-12-30。
7 如果值溢位,則會設定DBSTATUS_E_DATAOVERFLOW。
8 系統會忽略時間欄位。
9 略過小數秒欄位。
10 忽略日期元件。
11 時間會轉換成用戶端時區。 如果在此轉換期間發生錯誤,則會設定DBSTATUS_E_DATAOVERFLOW。
12 字串會剖析為 ISO 常值,並轉換成目標類型。 如果失敗,字串會剖析為 OLE 日期常值(它也具有時間元件),並從 OLE 日期 (DBTYPE_DATE) 轉換為目標類型。 字串必須符合允許 ISO 格式剖析成功之目標類型的常值語法。 若要讓 OLE 剖析成功,字串必須符合 OLE 所辨識的語法。 如果無法剖析字串,則會設定DBSTATUS_E_CANTCONVERTVALUE。 如果有任何元件值超出範圍,則會設定DBSTATUS_E_DATAOVERFLOW。
13 字串會剖析為 ISO 常值,並轉換成目標類型。 如果失敗,字串會剖析為 OLE 日期常值(它也具有時間元件),並從 OLE 日期 (DBTYPE_DATE) 轉換為目標類型。 除非目的地是DBTYPE_DATE或DBTYPE_DBTIMESTAMP,否則字串必須符合 datetime 常值的語法。 如果是這種情況,則允許日期時間或時間常值,ISO 格式剖析成功。 若要讓 OLE 剖析成功,字串必須符合 OLE 所辨識的語法。 如果無法剖析字串,則會設定DBSTATUS_E_CANTCONVERTVALUE。 如果有任何元件值超出範圍,則會設定DBSTATUS_E_DATAOVERFLOW。

另請參閱

繫結和轉換 (OLE DB)