SQL Server上的T-SQL数据类型REAL FLOAT(n)

时间:2010-11-02 09:10:19

标签: sql-server tsql sql-server-2008

是否有人知道以下T-SQL代码行的原因(在SQL Server 2008下)?

SELECT cast(2 as real(10))

我希望服务器以与我尝试时相同的方式进行投诉:

declare @x real(10)
set @x  = 4.1234567
select @x

我得到了:

Msg 2716, Level 16, State 1, Line 16
Column, parameter, or variable #2: Cannot specify a column width on data type real.

我意识到对于MS SQL 2008,存在一个等同于FLOAT(24)的数据类型。

我只是想知道为什么CAST不抱怨,也就是说,有可能在CAST(在SQL 2000下)中将无意义写为REAL(4,2),它在SQL 2008下与REAL(10)一起工作正常(再次在CAST)?

任何建议和澄清表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

看起来CAST(和CONVERT)将类型同义词(例如real)转换为它们的基础类型(即float),其长度说明符是有效的。再举一个例子,你可以这样做:

SELECT CONVERT(sysname(10),'abcdefghijkl')

但是你不能声明sysname(10)类型的变量,因为sysnamenvarchar(128)(或varchar(30)的同义词,具体取决于SQL版本)

简而言之,我会说这是CAST / CONVERT如何工作的一个怪癖,但不应该依赖它。