Sql server SQL Server检查表达式的结果数据类型
通常我会将数据类型放入临时表中,并检查表列类型,例如Sql server SQL Server检查表达式的结果数据类型,sql-server,tsql,types,Sql Server,Tsql,Types,通常我会将数据类型放入临时表中,并检查表列类型,例如 select 1.0 N into tbl sp_help tbl N列随后显示表达式1.0的数据类型。(这只是一个简单的例子) 有一个SQL函数可以直接检查表达式的数据类型,但我现在不知道这个名称 这个函数的名称是什么?我能想到的只有和函数 当传递表达式时,它们将返回1/0。不幸的是,如果给我一个表达式,我想不出任何东西会返回这个类型 更新: 试试看!我想这就是你要找的。很难找到……我从未见过这样的功能 从MSDN关于以下内容的文章:
select 1.0 N into tbl
sp_help tbl
N列随后显示表达式1.0
的数据类型。(这只是一个简单的例子)
有一个SQL函数可以直接检查表达式的数据类型,但我现在不知道这个名称
这个函数的名称是什么?我能想到的只有和函数 当传递表达式时,它们将返回1/0。不幸的是,如果给我一个表达式,我想不出任何东西会返回这个类型 更新:
试试看!我想这就是你要找的。很难找到……我从未见过这样的功能 从MSDN关于以下内容的文章: 对于由 单个常量、变量、标量 函数或列名:数据 类型、排序规则、精度、比例和 表达式的值是数据 类型、排序规则、精度、比例和 引用元素的值 当两个表达式由 使用比较运算符或逻辑运算符, 结果数据类型为布尔型和 该值为以下值之一: 真的、假的或未知的。更多 有关布尔数据类型的信息, 请参阅比较运算符 (Transact-SQL) 当两个表达式由 使用算术、按位或字符串 运算符,该运算符确定 结果数据类型 由许多元素组成的复杂表达式 符号和运算符的计算结果为a 单值结果。数据类型, 的排序规则、精度和值 结果表达式由 组合组件表达式, 一次两个,直到最终结果出来 达到。事件发生的顺序 表达式的组合定义为 中运算符的优先级 表情 近在咫尺
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');
或临时表/选择..进入。。作为你已经做过的事情的延伸
编辑:现在您有了-请参见gbnanswer@cyberkiwi:是的,他的答案很接近,我投了更高的票,但最初的帖子要求一个函数来直接计算表达式。据我所知,没有。您可以查看有关类型的信息(TYPEPROPERTY)。或列(sys.columns等),但不是随机表达式,除非是计算列。表达式本身没有持久性,除非它是一个列:您还想知道决定论等,它仅对问题中所述的列有效,使用
selectsql\u variant\u属性(1.0,'basetype')
告诉我sql将其视为数字类型。这是一个完美的匹配。值得注意的是,有一些类型不适用于此,例如nvarchar(max)。此外,nvarchar结果的maxlength增加了一倍,因此nvarchar(7)显示了14个字节,这是有意义的,但需要注意的是。