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

Откуда: Rudnyy
Сообщений: 198
здравствуйте!
пытаюсь выполнить следующее
create table #createSP(sort int, name varchar(255), razmer varchar(10), sales decimal, dall decimal, gr int )
...
set @itogo = 100
...
update #createSP set dall = case when razmer not like '' then razmer*@itogo)/10 end
проверяю, если поле razmer не '', то выполнится должен update, иначе update не дожен выполнится.
появляется ошибка
Error converting data type varchar to numeric.
значения в razmer могут быть разными - null или дробным

как организовать проверку?
надеюсь на вашу помощь.
13 ноя 09, 12:53    [7925412]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
Glory
Member

Откуда:
Сообщений: 104760
И что должно получиться если razmer varchar(10) умножить на 10 ?
Сколько будет "литры" умножить на 10, например ?
13 ноя 09, 12:55    [7925424]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36817
Т.е. вы сами себе сделали геморрой, использовав для хранения числовых данных нечисловой тип, а теперь героически их хотите преодолеть?
13 ноя 09, 12:57    [7925432]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Вместо
razmer not like ''
не лучше ли
razmer > ''
?
13 ноя 09, 13:02    [7925468]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
Влом регистрироваться
Guest
yaros-hoi,

update #createSP set dall = (CAST(razmer AS DECIMAL(38,19))*@itogo)/10 
where razmer <> '' and razmer is not null

Хотя один фиг надо все рефакторить, начиная с таблиц.
13 ноя 09, 13:04    [7925485]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
yaros-hoi
Member

Откуда: Rudnyy
Сообщений: 198
Гавриленко Сергей Алексеевич,

|название    |размер| кол-во|далл
балтика №9 |0.5      | 1000   | 50
балтика №7 |0.5      | 3000   |150
итого          |          | 4000    | - 
примерно так хранятся данные во временной таблице.
далл расчитывается количество*размер/10.
но расчет далл происходит только по конкретному наименованию, итого далл не считается.
13 ноя 09, 13:13    [7925579]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
yaros-hoi
Member

Откуда: Rudnyy
Сообщений: 198
Влом регистрироваться
yaros-hoi,

update #createSP set dall = (CAST(razmer AS DECIMAL(38,19))*@itogo)/10 
where razmer <> '' and razmer is not null

Хотя один фиг надо все рефакторить, начиная с таблиц.

та же ошибка
Error converting data type varchar to numeric.
13 ноя 09, 13:21    [7925663]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
yaros-hoi
Влом регистрироваться
yaros-hoi,

update #createSP set dall = (CAST(razmer AS DECIMAL(38,19))*@itogo)/10 
where razmer <> '' and razmer is not null

Хотя один фиг надо все рефакторить, начиная с таблиц.

та же ошибка
Error converting data type varchar to numeric.
По-Вашему, любую строку можно преобразовать в тип NUMERIC?
13 ноя 09, 13:23    [7925688]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
yaros-hoi
Member

Откуда: Rudnyy
Сообщений: 198
iap,

нет, уже в отчаянии пихаю все подряд:(
13 ноя 09, 13:27    [7925722]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
iljy
Member

Откуда:
Сообщений: 8711
yaros-hoi,

update #createSP set dall = (case when ISNUMERIC(razmer) = 1 then CAST(razmer AS DECIMAL(38,19))*@itogo /10 end)
where razmer <> '' and razmer is not null
13 ноя 09, 13:40    [7925843]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iljy
yaros-hoi,

update #createSP set dall = (case when ISNUMERIC(razmer) = 1 then CAST(razmer AS DECIMAL(38,19))*@itogo /10 end)
where razmer <> '' and razmer is not null
Тогда уж так:
update #createSP set dall =
 case when isnumeric(razmer) = 1 and razmer like '%[0-9]%' and razmer not like '%[^-+. 0-9]%' then cast(razmer as decimal(38,19))*@itogo /10 end
where isnumeric(razmer) = 1 and razmer like '%[0-9]%' and razmer not like '%[^-+. 0-9]%'
13 ноя 09, 13:48    [7925918]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
yaros-hoi
Member

Откуда: Rudnyy
Сообщений: 198
всем большое спасибо за помощь!!!
помогло следующее решение
update #createSP set dall = (case when ISNUMERIC(razmer) = 1 then CAST(razmer AS DECIMAL(38,19))*@itogo /10 end)
where razmer <> '' and razmer is not null
13 ноя 09, 14:06    [7926073]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить проверку?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33364
Блог
Автор, вместо использования костылей, лучше бы занялись рефакторингом вашего проекта
13 ноя 09, 14:17    [7926179]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить