SQL Server检查结果数据类型的表达式

时间:2011-02-15 18:59:11

标签: sql-server tsql types

通常我会将数据类型放入临时表并检查表列类型,例如

select 1.0 N into tbl

sp_help tbl

列N然后显示表达式1.0的数据类型。 (这只是一个简单的例子)

有一个SQL函数可以直接检查表达式的数据类型,但是这个名称现在让我无法理解。

这个功能的名称是什么?

3 个答案:

答案 0 :(得分:66)

SQL_VARIANT_PROPERTY已关闭

DECLARE @what sql_variant
DECLARE @foo decimal(19,3) = 1, @bar decimal(11,7) = 2

SELECT @what = @foo / @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

SELECT @what = @foo + @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')


SELECT @what = @foo * @bar
SELECT
    SQL_VARIANT_PROPERTY(@what, 'BaseType'),
    SQL_VARIANT_PROPERTY(@what, 'Precision'),
    SQL_VARIANT_PROPERTY(@what, 'Scale'),
    SQL_VARIANT_PROPERTY(@what, 'MaxLength')

或临时表/ SELECT..INTO ..作为你已经完成的事情的扩展

修改:Remus' answer?

答案 1 :(得分:4)

我能想到的只有ISNUMERICISDATE函数。

传递表达式时,这些将返回1/0。不幸的是,如果给出一个表达式,我想不出会返回类型的任何东西。

<强>更新

试试SQL_VARIANT_PROPERTY!我想这就是你要找的东西。很难追查......

答案 2 :(得分:2)

我从未见过这样的功能。

来自T-SQL expressions上的MSDN文章:

  

对于由a组成的简单表达式   单常数,变量,标量   函数或列名:数据   类型,整理,精确度,规模和   表达式的值是数据   类型,整理,精确度,规模和   引用元素的值。

     

当两个表达式组合时   使用比较或逻辑运算符,   结果数据类型是布尔值   值为以下之一:   TRUE,FALSE或UNKNOWN。更多   有关布尔数据类型的信息,   见比较运算符   (处理SQL)。

     

当两个表达式组合时   使用算术,按位或字符串   操作员,操作员确定   结果数据类型。

     

复杂的表达式由许多人组成   符号和运算符评估为a   单值结果。数据类型,   整理,精确和价值   结果表达式由   组合组件表达式,   一次两个,直到最终结果为止   到达。其中的序列   表达式的组合定义为   运营商的优先权   表达