不寻常的T-SQL - 这里发生了什么?

Mal*_*alk 4 t-sql sql-server-2008

有人可以向我解释这个查询发生了什么吗?

select 99.foo
Run Code Online (Sandbox Code Playgroud)

它的行为与...相同

select 99 as foo
Run Code Online (Sandbox Code Playgroud)

要么

select foo = 99 
Run Code Online (Sandbox Code Playgroud)

此外,它似乎只适用于整数.

adr*_*nks 7

select 99.foo被翻译成select 99. as foo(你可以离开了别名前的空格),选择99年." 作为一个numeric.由于小数点后面没有数字,它只显示'99'.

您可以通过运行以下方式确认:

select sql_variant_property(99., 'BaseType')
Run Code Online (Sandbox Code Playgroud)

返回numeric.

这是一样的select 99 as foo,这并选择"99",但作为一个int.这可以通过runnning确认:

select sql_variant_property(99, 'BaseType')
Run Code Online (Sandbox Code Playgroud)

返回int.

尽管所有三个查询看起来都是相同的,但第一个查询与返回值的类型中的下两个查询不同.