SQL_VARIANT_PROPERTY (Transact-SQL)

返回有关 sql_variant 值的基本数据类型和其他信息。

主题链接图标Transact-SQL 语法约定

语法

SQL_VARIANT_PROPERTY ( expression , property )

参数

  • expression
    类型为 sql_variant 的表达式。

  • property
    包含将为其提供信息的 sql_variant 属性的名称。property 的数据类型为 varchar(128),可以是下列值之一。

    说明

    返回的 sql_variant 基本类型

    BaseType

    SQL Server 数据类型,例如:

    bigint

    binary

    char

    date

    datetime

    datetime2

    datetimeoffset

    decimal

    float

    int

    money

    nchar

    numeric

    nvarchar

    real

    smalldatetime

    smallint

    smallmoney

    time

    tinyint

    uniqueidentifier

    varbinary

    varchar

    sysname

    NULL = 输入无效。

    Precision

    数值基本数据类型的位数:

    datetime = 23

    smalldatetime = 16

    float = 53

    real = 24

    decimal (p,s) 和 numeric (p,s) = p

    money = 19

    smallmoney = 10

    bigint = 19

    int = 10

    smallint = 5

    tinyint = 3

    bit = 1

    所有其他类型 = 0

    int

    NULL = 输入无效。

    Scale

    数值基本数据类型的小数点后的位数:

    decimal (p,s) 和 numeric (p,s) = s

    money 和 smallmoney = 4

    datetime = 3

    所有其他类型 = 0

    int

    NULL = 输入无效。

    TotalBytes

    同时容纳值的元数据和数据所需的字节数。在检查 sql_variant 列中数据的最大一侧时,该信息很有用。如果该值大于 900,则索引创建将失败。

    int

    NULL = 输入无效。

    Collation

    代表特定 sql_variant 值的排序规则。

    sysname

    NULL = 输入无效。

    MaxLength

    最大数据类型长度(字节)。例如,nvarchar(50) 的 MaxLength 是 100,int 的 MaxLength 是 4。

    int

    NULL = 输入无效。

返回类型

sql_variant

示例

以下示例检索有关 colA 值 46279.1 的 SQL_VARIANT_PROPERTY 信息,其中,colB = 1689,并假设 tableA 有类型为 sql_variant 和 colB 的 colA。

CREATE   TABLE tableA(colA sql_variant, colB int)
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)
SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',
         SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',
         SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'
FROM      tableA
WHERE      colB = 1689

下面是结果集:请注意,这三个值中的每一个都是 sql_variant。

Base Type    Precision    Scale
---------    ---------    -----
decimal      8           2

(1 row(s) affected)