在这个问题之后:“SQL: What does NULL as ColumnName imply”我对sql server为此查询中的列选择的数据类型感到好奇:
SELECT NULL as aColumn
所以我运行了这个测试:
select * from (select null as aaa) resulta
UNION ALL
select 6.54
Yelds两行:
aaa
---------------------------------------
NULL
6.54
虽然这个:
select * from (select null as aaa) resulta
UNION ALL
select 'ab'
在SQL Server 2000中对此进行了评论:
aaa
-----------
NULL
Msg 245, Level 16, State 1, Line 5
Syntax error converting the varchar value 'ab' to a column of data type int.
并在SQL Server 2008中给出了这个:
aaa
----
NULL
ab
那么有什么猜测sql server为all null列选择什么数据类型?
答案 0 :(得分:6)
SQL Server将采用显式定义的第一种数据类型,否则,它将选择隐式保存数据的类型。
在您的示例中,它可以键入的第一个值是基于小数点的数值。因此,表格就是这样定义的。当您尝试插入文本时,它无法进行转换。
阅读链接以便更好地了解兼容的数据类型。附近有一张好图表。
答案 1 :(得分:3)
在SQL Server 2008中,我使用它来创建临时表,然后查询新创建的表的模式:
select null as col1
into #test
exec tempdb..sp_help '#test'
结果显示该列为int。