通常我会将数据类型放入临时表并检查表列类型,例如
select 1.0 N into tbl
sp_help tbl
列N然后显示表达式1.0
的数据类型。 (这只是一个简单的例子)
有一个SQL函数可以直接检查表达式的数据类型,但是这个名称现在让我无法理解。
这个功能的名称是什么?
答案 0 :(得分:66)
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 ..作为你已经完成的事情的扩展
答案 1 :(得分:4)
传递表达式时,这些将返回1/0。不幸的是,如果给出一个表达式,我想不出会返回类型的任何东西。
<强>更新强>
试试SQL_VARIANT_PROPERTY!我想这就是你要找的东西。很难追查......
答案 2 :(得分:2)
我从未见过这样的功能。
来自T-SQL expressions上的MSDN文章:
对于由a组成的简单表达式 单常数,变量,标量 函数或列名:数据 类型,整理,精确度,规模和 表达式的值是数据 类型,整理,精确度,规模和 引用元素的值。
当两个表达式组合时 使用比较或逻辑运算符, 结果数据类型是布尔值 值为以下之一: TRUE,FALSE或UNKNOWN。更多 有关布尔数据类型的信息, 见比较运算符 (处理SQL)。
当两个表达式组合时 使用算术,按位或字符串 操作员,操作员确定 结果数据类型。
复杂的表达式由许多人组成 符号和运算符评估为a 单值结果。数据类型, 整理,精确和价值 结果表达式由 组合组件表达式, 一次两个,直到最终结果为止 到达。其中的序列 表达式的组合定义为 运营商的优先权 表达