sql_variant (Transact-SQL)
儲存各種 SQL Server 支援之資料類型值的資料類型。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
語法
sql_variant
備註
sql_variant 可用在資料行、參數、變數及使用者定義函數的傳回值中。 sql_variant 可讓這些資料庫物件能夠支援其他資料類型的值。
sql_variant 類型的資料行可包含不同資料類型的資料列。 例如,定義為 sql_variant 的資料行,可以儲存 int、binary 和 char 值。 下表列出無法利用 sql_variant 來儲存的值類型:
varchar(max) |
varbinary(max) |
nvarchar(max) |
xml |
text |
ntext |
image |
rowversion (timestamp) |
sql_variant |
geography |
hierarchyid |
geometry |
使用者定義型別 |
datetimeoffset |
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 |
datetime2 |
日期和時間 |
datetimeoffset |
日期和時間 |
datetime |
日期和時間 |
smalldatetime |
日期和時間 |
date |
日期和時間 |
time |
日期和時間 |
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 值,且基底資料型別是在相同的資料類型家族中,會先將基底資料型別在階層圖表中較低位置的值隱含地轉換成其他資料類型,之後,再進行比較。
當比較 char、varchar、nchar 或 nvarchar 資料類型的 sql_variant 值時,將會先根據以下準則來比較其定序:LCID、LCID 版本、比較旗標和排序識別碼。 每一個準則都會以整數值的形式來比較,而且會根據所列的順序來比較。 如果所有的準則都相同,將會根據此定序來比較實際的字串值。
轉換 sql_variant 資料
處理 sql_variant 資料類型時,SQL Server 支援將有其他資料類型的物件隱含轉換成 sql_variant 類型。 但是 SQL Server 不支援從 sql_variant 資料隱含轉換成其他資料類型的物件。