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

Jos*_*ira 8 sql t-sql sql-server

在这个问题之后:" SQL:作为ColumnName的NULL意味着什么 "我对sql server为此查询中的列选择的数据类型感到好奇:

SELECT NULL as aColumn
Run Code Online (Sandbox Code Playgroud)

所以我运行了这个测试:

select * from (select null as aaa) resulta
UNION ALL
select 6.54
Run Code Online (Sandbox Code Playgroud)

Yelds两行:

aaa
---------------------------------------
NULL
6.54
Run Code Online (Sandbox Code Playgroud)

这一个:

select * from (select null as aaa) resulta
UNION ALL
select 'ab'
Run Code Online (Sandbox Code Playgroud)

在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.
Run Code Online (Sandbox Code Playgroud)

并在SQL Server 2008中给出了这样的:

aaa
----
NULL
ab
Run Code Online (Sandbox Code Playgroud)

那么有什么猜测sql server为全空列选择什么数据类型?

Chr*_*s H 6

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

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

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

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