是否有人知道以下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)?
任何建议和澄清表示赞赏。谢谢。
答案 0 :(得分:2)
看起来CAST(和CONVERT)将类型同义词(例如real)转换为它们的基础类型(即float),其长度说明符是有效的。再举一个例子,你可以这样做:
SELECT CONVERT(sysname(10),'abcdefghijkl')
但是你不能声明sysname(10)
类型的变量,因为sysname
是nvarchar(128)
(或varchar(30)
的同义词,具体取决于SQL版本)
简而言之,我会说这是CAST / CONVERT如何工作的一个怪癖,但不应该依赖它。