8

在这个问题之后:“ SQL:NULL as ColumnName 意味着什么”我开始好奇 sql server 会为这个查询中的列选择什么数据类型:

SELECT NULL as aColumn

所以我运行了这个测试:

select * from (select null as aaa) resulta
UNION ALL
select 6.54

产生两行:

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 为全空列选择什么数据类型的任何猜测?

4

2 回答 2

6

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

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

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

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

于 2013-06-28T17:56:03.413 回答
3

在 SQL Server 2008 中,我使用它来创建一个临时表,然后查询新创建的表的架构:

select null as col1
into #test

exec tempdb..sp_help '#test'

结果表明该列是一个int。

于 2013-06-28T17:46:52.133 回答