共用方式為


中繼資料 - SQL Server Native Client 中的參數和資料列集

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

本主題提供與 OLE DB 日期和時間增強功能相關的下列類型和類型成員的相關資訊。

  • DBBINDING 結構

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

下列資訊會以 DBPARAMINFO 結構透過 prgParamInfo 傳回:

參數類型 wType ulParamSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Clear
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Set
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Clear
Datetime DBTYPE_DBTIMESTAMP 16 23 3 Clear
datetime2 DBTYPE_DBTIMESTAMP 16 19,21..27 0..7 Set
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26,28..34 0..7 Set

請注意,在某些情況下值的範圍並不是連續的。 這是當小數有效位數大於零時增加的小數點所導致。

DBPARAMFLAGS_SS_ISVARIABLESCALE只有在連線到 SQL Server 2008 (10.0.x) 或更新版本伺服器時才有效。 連接到下層伺服器時,永遠不會設定 DBPARAMFLAGS_SS_ISVARIABLESCALE。

ICommandWithParameters::SetParameterInfo 和隱含參數類型

以 DBPARAMBINDINFO 結構所提供的資訊必須與下列相符:

pwszDataSourceType

(提供者特定)
pwszDataSourceType

(OLE DB 一般)
ulParamSize bScale
DBTYPE_DATE 6 忽略
date DBTYPE_DBDATE 6 忽略
DBTYPE_DBTIME 10 忽略
time DBTYPE_DBTIME2 10 0..7
smalldatetime 16 忽略
Datetime 16 忽略
datetime2 或 DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP 16 0..7
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 0..7

已忽略 bPrecision 參數。

當傳送資料到伺服器時,"DBPARAMFLAGS_SS_ISVARIABLESCALE" 會被忽略。 應用程式可以使用提供者特定的類型名稱 "datetime" 和 "smalldatetime" 來強制使用舊版的表格式資料流 (TDS) 類型。 連線到 SQL Server 2008 (10.0.x) (或更新版本) 伺服器時,將會使用 「 datetime2」 格式,並在必要時發生隱含伺服器轉換,當類型名稱為 「 datetime2 」 或 「DBTYPE_DBTIMESTAMP」。 如果使用了提供者特定的類型名稱 "datetime" 或 "smalldatetime",就會忽略 bScale。 否則,appications 必須確定 bScale 已正確設定。 從 SQL Server 2005 (9.x) 升級自 MDAC 和 SQL Server Native Client 的應用程式,若未正確設定 bScale ,則使用 「DBTYPE_DBTIMESTAMP」 的應用程式將會失敗。 連線到 SQL Server 2008 (10.0.x) 之前版本的伺服器執行個體時,bScale 值如果不是 0 或 3 且具有 "DBTYPE_DBTIMESTAMP",即為錯誤,且將傳回 E_FAIL。

未呼叫 ICommandWithParameters::SetParameterInfo 時,提供者會依照 IAccessor::CreateAccessor::CreateAccessor 中指定的系結類型,將伺服器類型隱含在下列專案上:

繫結類型 pwszDataSourceType

(提供者特定)
DBTYPE_DATE datetime2(0)
DBTYPE_DBDATE date
DBTYPE_DBTIME time(0)
DBTYPE_DBTIME2 time(7)
DBTYPE_DBTIMESTAMP datetime2(7)
DBTYPE_DBTIMESTAMPOFFSET datetimeoffset(7)

IColumnsRowset::GetColumnsRowset

IColumnsRowset::GetColumnsRowset 會傳回下列資料行:

資料行類型 DBCOLUMN_TYPE DBCOLUM_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE、DBCOLUMN_DATETIMEPRECISION DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Clear
time DBTYPE_DBTIME2 10 8, 10..16 0..7 Set
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Clear
Datetime DBTYPE_DBTIMESTAMP 16 23 3 Clear
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Set
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Set

在 DBCOLUMN_FLAGS 中,DBCOLUMNFLAGS_ISFIXEDLENGTH 對 date/time 類型永遠為 true,而且下列旗標永遠為 false:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER

  • DBCOLUMNFLAGS_MAYDEFER

剩餘的旗標 (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE 和 DBCOLUMNFLAGS_WRITEUNKNOWN) 可以根據資料行的定義方式以及實際的查詢來設定。

在 DBCOLUMN_FLAGS 中會提供新旗標 DBCOLUMNFLAGS_SS_ISVARIABLESCALE,以允許應用程式判斷資料行的伺服器類型,其中 DBCOLUMN_TYPE 是 DBTYPE_DBTIMESTAMP。 DBCOLUMN_SCALE 或 DBCOLUMN_DATETIMEPRECISION 也必須用來識別伺服器類型。

DBCOLUMNFLAGS_SS_ISVARIABLESCALE只有在連線到 SQL Server 2008 (10.0.x) 或更新版本伺服器時才有效。 連接到下層伺服器時,不會定義 DBCOLUMNFLAGS_SS_ISVARIABLESCALE。

IColumnsInfo::GetColumnInfo

DBCOLUMNINFO 結構會傳回下列資訊:

參數類型 wType ulColumnSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
date DBTYPE_DBDATE 6 10 0 Clear
time(1..7) DBTYPE_DBTIME2 10 8, 10..16 0..7 Set
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Clear
Datetime DBTYPE_DBTIMESTAMP 16 23 3 Clear
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Set
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Set

dwFlags 中,DBCOLUMNFLAGS_ISFIXEDLENGTH 對 date/time 類型永遠為 true,而且下列旗標永遠為 false:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER, MAYDEFER

可以設定剩餘的旗標 (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE 和 DBCOLUMNFLAGS_WRITEUNKNOWN)。

dwFlags 中會提供新旗標 DBCOLUMNFLAGS_SS_ISVARIABLESCALE,以允許應用程式判斷資料行的伺服器類型,其中 wType 是 DBTYPE_DBTIMESTAMP。 bScale 也必須用來識別伺服器類型。

另請參閱

中繼資料 (OLE DB)