Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как побороть неявное преобразование float в char  [new]
Alex Shulg
Member

Откуда:
Сообщений: 227
Всем привет!

Простой пример:
declare @float1 float, @char1 nvarchar(255), @float2 float
set @float1 = 1418030.94285714
set @char1 = @float1
set @float2 = CAST(@char1 as float)
select @float1 as [Float1], @char1 as [Char1], @float2 as [Float2]

дает результат:
Float1 Char1 Float2
1418030.94285714 1.41803e+006 1418030

Вопрос - как побороть неявное преобразование из float в char? STR() не предлагать, объясню:
Интересует именно неявное преобразование, потому-что подобная фигня вылезает в инструкции FETCH NEXT FROM <cursor> INTO ...,
где я из курсора получаю данные в переменную типа nvarchar для последующей обработки. Использовать переменную типа float - не вариант, т.к. заранее не могу гарантировать, что это будет именно float (данные получаю из Excel таблиц).
18 июл 12, 10:31    [12881914]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Alex Shulg
как побороть неявное преобразование из float в char?
А что имеется в виду? Чтоб точность не терялась?

ИМХО никак, только явное преобразование.

А почему в запросе для курсора нельзя сделать преобразование?
18 июл 12, 10:44    [12882010]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
Alex Shulg
Member

Откуда:
Сообщений: 227
Жаль... а я думал, может чего не знаю, может есть какая волшебная опция...

Можно преобразовать и в запросе для курсора. Просто дальше, когда я по строкам анализирую курсор, я все равно проверяю данные, преобразовываю и т.п., и дальше добавляю в результирующую таблицу (ее структура уже четко опрделена). Вот в этом месте и логично было бы преобразовывать (как мне кажется).
18 июл 12, 10:52    [12882066]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Alex Shulg
Интересует именно неявное преобразование, потому-что подобная фигня вылезает в инструкции FETCH NEXT FROM <cursor> INTO ...,
где я из курсора получаю данные в переменную типа nvarchar для последующей обработки. Использовать переменную типа float - не вариант, т.к. заранее не могу гарантировать, что это будет именно float (данные получаю из Excel таблиц).
И какой же тогда тип столбца у вас в запросе? sql_variant?
18 июл 12, 10:58    [12882114]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
Alex Shulg
Member

Откуда:
Сообщений: 227
invm
И какой же тогда тип столбца у вас в запросе? sql_variant?

Я получаю данны из Excel запросом: Select * INTO TempExport From OPENROWSET ...
Гарантировать какие типы полей я получу в таблице TempExport - не могу, поэтому из курсора на эту таблицу я вытягиваю данные в переменные тип nvarchar, которые далее анализирую/проверяю/конвертирую
18 июл 12, 11:03    [12882142]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Тогда вас спасет переменная типа sql_variant вместо nvarchar. Заодно сможете воспользоваться sql_variant_property.
18 июл 12, 11:26    [12882300]     Ответить | Цитировать Сообщить модератору
 Re: как побороть неявное преобразование float в char  [new]
Alex Shulg
Member

Откуда:
Сообщений: 227
Спасибо за советы/подсказки.
18 июл 12, 12:05    [12882600]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить