資料類型對應和分散式查詢

OLE DB 提供者將以稱為 DBTYPE 的 OLE DB 類型識別碼來公開其資料的資料類型。在 OLE DB 資料類型與 SQL Server 系統資料類型之間,資料類型是透過對應資料來轉換:

  • 從 OLE DB 資料類型到 SQL Server 系統資料類型。此轉換會在 SQL Server 從 OLE DB 資料來源讀取資料時發生 (在 SELECT 陳述式中,或在 UPDATE、INSERT 或 DELETE 陳述式的讀取端)。
  • 從 SQL Server 系統資料類型到 OLE DB 資料類型。此轉換會在 SQL Server 將資料寫入 (大多在 INSERT 或 UPDATE 陳述式中) OLE DB 資料來源時發生,且所修改的資料表為遠端資料表。

從 OLE DB 提供者到 SQL Server 的資料類型對應

從 OLE DB 提供者到 SQL Server 的資料類型對應定義了所允許的比較與運算式,以及牽涉到遠端資料的有效明確轉換。此對應顯示於下表中。

運算式內的遠端資料表資料行的類型有效性可由此規則來摘要說明:在相同的內容中,若相對應的對應 SQL Server 資料類型在「資料類型對應」資料表中有效,則 Transact-SQL 運算式中的遠端資料行值有效。

例如,請看運算式:local_columnOPERATOR remote_column。在此運算式中,local_column 是一個本機資料表資料行,而 remote_column 則是遠端資料表資料行。如果 OPERATOR 對於本機資料行的資料類型,以及 remote_column 的 DBTYPE 對應的資料類型而言是有效運算子,則此運算式有效。

同樣地,如果 remote_column 的 DBTYPE 對應到 SQL Server 系統資料類型 data_type_2,且允許 data_type_2 明確轉換成 data_type_1 的話,則允許 CAST(remote_column AS data_type_1)。例如,提供者端的 DBTYPE_DATE 資料類型資料行可轉換成 SQL Server 中的 datetime 資料行。不過,DBTYPE_DATE 資料並無法直接轉換成 varchar

下表顯示資料類型對應資料表。您可以使用 DBTYPE 指標及其資料行的 DBCOLUMNFLAGS 值,找到對應的 SQL Server 資料類型。

DBTYPE DBCOLUMNFLAGS SQL Server 資料類型

DBTYPE_I1

numeric(3, 0)1

DBTYPE_I2

smallint

DBTYPE_I4

int

DBTYPE_I8

bigint

DBTYPE_UI1

tinyint

DBTYPE_UI1

numeric(5,0)

DBTYPE_UI1

numeric(10,0)

DBTYPE_UI1

numeric(20,0)

DBTYPE_R4

float

DBTYPE_R8

real

DBTYPE_NUMERIC

numeric

DBTYPE_DECIMAL

decimal

DBTYPE_CY

money

DBTYPE_BSTR

DBCOLUMNFLAGS_ISLONG = true

ntext

DBTYPE_BSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

nchar

DBTYPE_BSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_IDISPATCH

Error

DBTYPE_ERROR

Error

DBTYPE_BOOL

bit

DBTYPE_VARIANT

nvarchar(4000)

DBTYPE_IUNKNOWN

Error

DBTYPE_GUID

uniqueidentifier

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true,或最大資料行大小 > 8,000 位元組。

image

DBTYPE_BYTES

DBCOLUMNFLAGS_ISLONG = true,且資料行大小的長度不限。

varbinary(max)

DBTYPE_BYTES

DBCOLUMNFLAGS_ISROWVER = true、DBCOLUMNFLAGS_ISFIXEDLENGTH = true,且資料行大小 = 8

timestamp

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

binary

DBTYPE_BYTES

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varbinary

DBTYPE_STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = true

char

DBTYPE_ STR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

varchar

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = true,或最大資料行大小 > 8,000 個字元。

text

DBTYPE_STR

DBCOLUMNFLAGS_ISLONG = true,且資料行大小的長度不限。

varchar(max)

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXED

nchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISFIXEDLENGTH = false

nvarchar

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true,或最大資料行大小 > 4,000 個字元。

ntext

DBTYPE_WSTR

DBCOLUMNFLAGS_ISLONG = true,且資料行大小的長度不限。

nvarchar(max)

DBTYPE_UDT

Equivalent SQL Server 使用者自訂類型 (如果有註冊的話)。

DBTYPE_DATE

datetime

DBTYPE_DBDATE

datetime (相容性層級小於 9.0)。

DBTYPE_DBTIME

datetime

DBTYPE_DBTIMESTAMP

datetime

DBTYPE_ARRAY

Error

DBTYPE_BYREF

忽略

DBTYPE_VECTOR

Error

DBTYPE_RESERVED

Error

DBTYPE_XML

xml (只限於傳遞查詢)。

1numeric(p,s) 表示 SQL Server 資料類型 numeric,有效位數是 p,小數位數是 s

ms175970.note(zh-tw,SQL.90).gif附註:
若資料必須轉換成所顯示之預設值以外的 SQL Server 資料類型,則需要明確轉換 (使用 CAST 或 CONVERT 函數)。如需詳細資訊,請參閱<CAST 和 CONVERT (Transact-SQL)>。

DBTYPE 指標和 DBCOLUMNFLAGS 值之資訊,可透過 COLUMNS 結構描述資料列集或透過 IColumnsInfo 介面從提供者取得。若為 COLUMNS 結構描述資料列集,DATA_TYPE 和 COLUMN_FLAGS 資料行代表 DBTYPE 和 DBCOLUMNFLAGS 值。若為 IColumnsInfo::GetColumnInfo 介面,DBCOLUMNINFO 結構的 wTypedwFlags 成員代表這些值。

從 SQL Server 到 OLE DB 提供者的資料類型對應

使用上表所顯示的對應,可將 SQL Server 系統資料類型對應到 OLE DB 類型。當下列任一條件存在時,允許從 SQL Server 類型 S1 對應到特定的 OLE DB 類型 T

  • 相對應的對應可以在資料類型對應資料表中找到。
  • 資料類型 S1 到另一個 SQL Server 資料類型 S2 的隱含轉換是允許的,而且在資料類型對應資料表中,有定義 S2T 的對應。

請參閱

概念

使用分散式查詢的指導方針
分散式查詢

其他資源

資料類型 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助