Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server如何确定通过表达式派生的列的数据类型_Sql_Sql Server_Precision_Numeric - Fatal编程技术网

SQL server如何确定通过表达式派生的列的数据类型

SQL server如何确定通过表达式派生的列的数据类型,sql,sql-server,precision,numeric,Sql,Sql Server,Precision,Numeric,我有一个sql语句 > SELECT SUM(UNIT*ISNULL((CAST(RATIO AS DECIMAL(18,5))/100),1)) AS UNITS > into x_table from some_table 上面的单位是int, 在x_表中,我可以看到单位是十进制的(38,9)。sql server是如何获得特定数据类型的。 谢谢 上面的链接和评论将解释如何进行,但如果您需要快速回答或确认,请使用sp_descripe_first_result_set或sys.

我有一个sql语句

> SELECT SUM(UNIT*ISNULL((CAST(RATIO AS DECIMAL(18,5))/100),1)) AS UNITS
> into x_table from some_table
上面的单位是int, 在x_表中,我可以看到单位是十进制的(38,9)。sql server是如何获得特定数据类型的。
谢谢

上面的链接和评论将解释如何进行,但如果您需要快速回答或确认,请使用
sp_descripe_first_result_set
sys.dm_exec_descripe_first_result_set()

请注意,我已将
删除到…

示例

Declare @tsql nvarchar(max) =  N'SELECT SUM(UNIT*ISNULL((CAST(RATIO AS DECIMAL(18,5))/100),1)) AS UNITS from some_table'

exec sp_describe_first_result_set @tsql 

--------
-- OR --
--------

select column_ordinal
      ,name
      ,system_type_name 
 From  sys.dm_exec_describe_first_result_set(@tsql,null,null )  
  • 必须将所有操作数转换为。在本例中,单位和文字100将转换为十进制(p,s)
  • CAST(十进制比率(18,5))
    当然是
    DECIMAL(18,5)
  • (CAST(比率为十进制(18,5))/100)
    十进制(22,9)
    -这是遵循除法结果的规则,其中
    100
    被视为
    十进制(3,0)
  • ISNULL((CAST(比率为十进制(18,5))/100),1)
    is
    DECIMAL(22,9)
    AS
    ISNULL
    始终采用其第一个参数的数据类型
  • UNIT*ISNULL((转换为十进制(18,5))/100),1)
    is
    DECIMAL(33,9)
    使用上述链接的乘法规则,并且
    UNIT
    被视为
    十进制(10,0)
  • SUM(UNIT*ISNULL((CAST(比率为十进制(18,5))/100),1))
    is
    DECIMAL(38,9)
    作为从中生成的类型

确定数据类型。最高的胜利。看来它得到了正确的答案-你明确希望它以某种形式出现吗?或者你的意思是它是如何选择(38,9)作为精度/刻度的?我可以看到结果是十进制的,但它是如何得到十进制的(38,9)?谢谢同样重要的是:。