SQL server如何确定通过表达式派生的列的数据类型
我有一个sql语句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.
> 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)
isISNULL((CAST(比率为十进制(18,5))/100),1)
ASDECIMAL(22,9)
始终采用其第一个参数的数据类型ISNULL
isUNIT*ISNULL((转换为十进制(18,5))/100),1)
使用上述链接的乘法规则,并且DECIMAL(33,9)
被视为UNIT
十进制(10,0)
isSUM(UNIT*ISNULL((CAST(比率为十进制(18,5))/100),1))
作为从中生成的类型DECIMAL(38,9)