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

Ric*_*iwi 42 t-sql sql-server types

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

select 1.0 N into tbl

sp_help tbl
Run Code Online (Sandbox Code Playgroud)

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

有一个SQL函数可以直接检查表达式的数据类型,但是这个名称现在让我失望了.

这个功能叫什么名字?

gbn*_*gbn 67

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')
Run Code Online (Sandbox Code Playgroud)

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

编辑:Remus的回答?

  • 值得注意的是,有些类型对此不起作用,例如nvarchar(max)。 (2认同)

Abe*_*ler 5

我能想到的就是ISNUMERICISDATE函数。

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

更新:

试试SQL_VARIANT_PROPERTY!我认为这就是您想要的。很难追踪...