【发布时间】:2016-06-23 11:41:07
【问题描述】:
我认为我有三个选择:
Create view myView
As
Begin
Select Col1, Col2, Col3 from table1
Union
Select Col1, Col2, Col3 from table2
Union
Select 0.00 As Col1, 0.00 As Col2, 0.00 As Col3 from table3
End
如果我查询:
Select 0.00 As Col1, 0.00 As Col2, 0.00 As Col3
from table3
它为所有三列返回0.00,但是当我查询视图时
Select * from myView
第三次选择返回“0”而不是 0.00。这里有什么遗漏吗?
我的错误,我在注释中输入数据类型是十进制,实际上 table1 和 table2 中的所有列 (col1,Col2,Col3) 都是“float”数据类型。 类型:浮点数,计算:无,长度:8
EXEC sp_describe_first_result_set N'SELECT * FROM myView;' 给了
Name | IsNullable | system_type_id | system_type_name |max_length|precision|scale
Col1 | 1 |62 |float |8 |53 |0
Col2 | 1 |62 |float |8 |53 |0
Col3 | 1 |62 |float |8 |53 |0
【问题讨论】:
-
table1 和 table2 中的 Col1、Col2、Col3 是什么?
-
您的
Col1、Col2、Col3的数据类型是什么?如果任何列是INT,则SQL Server 会将所有值从SELECT和UNION中的任何一个转换为INT(从而删除您的.00...) -
@marc_s,由于十进制的优先级高于 int,我希望将 int 值转换为十进制而不是反之亦然。
-
@marc_s,根据联机丛书 (msdn.microsoft.com/en-us/library/ms180026.aspx),数据类型优先级规则适用于 UNION。 sp_describe_first_result_set 显示了这种行为。我猜这是显示问题。
-
@JohnyBravo,当您说
SQL only时,您是指 SQL Server Management Studio 吗?我使用 SSMS SQL 2016 得到了预期的结果。EXEC sp_describe_first_result_set N'SELECT * FROM myview;'的结果是什么?
标签: sql sql-server