共用方式為


從伺服器到用戶端執行的 SQL Server Native Client 轉換

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

轉換

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

至 ->

日期 DBDATE DBTIME DBTIME2 DBTIMESTAMP DBTIMESTAMPOFFSET FILETIME BYTES VARIANT SSVARIANT BSTR STR WSTR
Date 1,7 [確定] - - 1 1,3 1,7 - [確定] \(VT_BSTR) [確定] [確定] 4 4
Time 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
Datetime 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

(datetime)
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

(date)
1,7 [確定] 2 2 1 1,3 1,7 - OK(VT_BSTR) [確定] [確定] 4 4
Sql_variant

(time)
5,6,7 2 6 [確定] 6 3,6 5,6 - OK(VT_BSTR) [確定] [確定] 4 4
Sql_variant

(datetime2)
5,7 8 9,10 10 [確定] 3 5,7 - OK(VT_BSTR) [確定] [確定] 4 4
Sql_variant

(datetimeoffset)
5,7,11 8,11 9,10,11 10,11 7,11 確定 5,7,11 - OK(VT_BSTR) [確定] [確定] 4 4

符號的索引鍵

符號 意義
[確定] 不需要任何轉換。
- 不支援轉換。 如果繫結在呼叫 IAccessor::CreateAccessor 時通過驗證,則會在 rgStatus 中傳回 DBBINDSTATUS_UPSUPPORTEDCONVERSION。 當存取子驗證延遲時,會設定 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,否則字串必須符合日期時間常值的語法。 如果是這種狀況,ISO 格式剖析允許使用日期時間或時間嘗試才會成功。 若要讓 OLE 剖析成功,字串必須符合 OLE 所識別的語法。 如果無法剖析字串,則會設定 DBSTATUS_E_CANTCONVERTVALUE。 如果任何元件值超出範圍,會設定 DBSTATUS_E_DATAOVERFLOW。

另請參閱

繫結和轉換 (OLE DB)