SQL Server为空列选择的数据类型

时间:2013-06-28 17:42:24

标签: sql sql-server tsql

在这个问题之后:“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列选择什么数据类型?

2 个答案:

答案 0 :(得分:6)

SQL Server将采用显式定义的第一种数据类型,否则,它将选择隐式保存数据的类型。

在您的示例中,它可以键入的第一个值是基于小数点的数值。因此,表格就是这样定义的。当您尝试插入文本时,它无法进行转换。

阅读链接以便更好地了解兼容的数据类型。附近有一张好图表。

http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 1 :(得分:3)

在SQL Server 2008中,我使用它来创建临时表,然后查询新创建的表的模式:

select null as col1
into #test

exec tempdb..sp_help '#test'

结果显示该列为int。