sql_variant (Transact-SQL)

這是一種資料類型,用來儲存各種 SQL Server 2005 支援的資料類型的值,但 textntextimagetimestampsql_variant 除外。

主題連結圖示Transact-SQL 語法慣例

語法

sql_variant

備註

sql_variant 可用在資料行、參數、變數以及使用者自訂函數的傳回值中。sql_variant 使這些資料庫物件能夠支援其他資料類型的值。

sql_variant 類型的資料行可包含不同資料類型的資料列。例如,定義為 sql_variant 的資料行,可以儲存 intbinarychar 值。下表列出無法利用 sql_variant 來儲存的值類型:

varchar(max)

  • varbinary(max)

nvarchar(max)

xml

  • text

ntext

  • image

timestamp

  • sql_variant

使用者自訂類型

sql_variant 的最大長度是 8016 位元組。其中包括基底類型資訊和基底類型值。實際基底類型值的最大長度是 8,000 位元組。

sql_variant 資料類型必須先轉換成基底資料類型值,之後,才能參與加法和減法之類的作業。

您可以指派預設值給 sql_variant。這項資料類型也可以用 NULL 作為基礎值,但 NULL 值並沒有相關的基底類型。另外,sql_variant 也不能有另一個 sql_variant 來作為它的基底類型。

唯一、主要或外部索引鍵可以包括 sql_variant 類型的資料行,但組成特定資料列的索引鍵之資料值總長度,不應超出索引的最大長度。這是 900 位元組。

一份資料表可以有任意數目的 sql_variant 資料行。

在 CONTAINSTABLE 和 FREETEXTTABLE 中,無法使用 sql_variant

ODBC 不完全支援 sql_variant。因此,當您使用 Microsoft OLE DB Provider for ODBC (MSDASQL) 時,會將 sql_variant 資料行的查詢當作二進位資料傳回。例如,包含 'PS2091' 字元字串資料的 sql_variant 資料行會以 0x505332303931 傳回。

比較 sql_variant 值

sql_variant 資料類型屬於轉換的資料類型階層清單頂端。如果進行 sql_variant 比較,SQL Server 資料類型階層順序會分組到資料類型家族中。

資料類型階層 資料類型家族

sql_variant

sql_variant

datetime

日期和時間

smalldatetime

日期和時間

float

近似數值

real

近似數值

decimal

精確數值

money

精確數值

smallmoney

精確數值

bigint

精確數值

int

精確數值

smallint

精確數值

tinyint

精確數值

bit

精確數值

nvarchar

Unicode

nchar

Unicode

varchar

Unicode

char

Unicode

varbinary

二進位

binary

二進位

uniqueidentifier

Uniqueidentifier

下列規則適用於 sql_variant 比較:

  • 當比較不同基底資料類型的 sql_variant 值,且基底資料類型是在不同的資料類型家族中,資料類型家族在階層圖表中較高位置的值,會被視為兩個值中的較大者。
  • 當比較不同基底資料類型的 sql_variant 值,且基底資料類型是在相同的資料類型家族中,會先將基底資料類型在階層圖表中較低位置的值隱含地轉換成其他資料類型,之後,再進行比較。
  • 當比較 charvarcharncharnvarchar 資料類型的 sql_variant 值時,會根據下列準則來評估它們:LCID、LCID 版本、比較旗標和排序識別碼。

請參閱

參考

CAST 和 CONVERT (Transact-SQL)

其他資源

使用 sql_variant 資料

說明及資訊

取得 SQL Server 2005 協助