Тип данных T-SQL REAL FLOAT (n) на SQL Server - PullRequest
0 голосов
/ 02 ноября 2010

Кто-нибудь знает причины, по которым работает следующая строка кода 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 существует тип данных REAL, эквивалентный FLOAT (24).

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

Любые предложения и разъяснения приветствуются. Спасибо.

1 Ответ

2 голосов
/ 02 ноября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...