2010-11-02 3 views
0

Кто-нибудь знает причины, по которым работает следующая строка кода T-SQL (в SQL Server 2008)?Тип данных T-SQL REAL FLOAT (n) на SQL Server

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 существует тип данных REAL, эквивалентный FLOAT (24).

Я просто хотел бы знать, почему CAST не жалуется, т. Е. В CAST (по SQL 2000) можно было писать бессмыслицу как REAL (4,2), она отлично работает с REAL (10) под SQL 2008 (снова в CAST)?

Любые предложения и пояснения. Спасибо.

ответ

2

Похоже, что CAST (и CONVERT) переводит синонимы типа (такие как real) в их базовый тип (например, float), для которых допустимы спецификаторы длины. В качестве другого примера, вы можете сделать:

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

Но вы не можете объявить переменную типа sysname(10), поскольку sysname является синонимом nvarchar(128) (или varchar(30), в зависимости от версии SQL)

Короче говоря, я d сказать, что это причуда работы CAST/CONVERT, но на нее нельзя положиться.

Смежные вопросы