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

Откуда:
Сообщений: 19
If CHARINDEX(SUBSTRING(@DocGoodsBarCode,1,@LenPrefixTovar),@SpecialWeightBarcodePrefixList) > 0
      Set @SpecialWeight = 1
    Set @TmpStr = SUBSTRING(@ImpWeightBarCodesList, @PosLine ,@LenPrefixTovar + 2)
    Set @LenWeightTovar = CAST(SUBSTRING(@TmpStr,len(@TmpStr),1) AS integer)
    If  @SpecialWeight = 0 -- весовой товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar,@digBeforePoint)
      Set @RIGHT = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar + @digBeforePoint,@digAfterPoint)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @RIGHT = '0.'+ @RIGHT
      Set @Rnum = CAST(@RIGHT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum + @Rnum   -- вес товара
    End
    If  @SpecialWeight = 1 -- штучный товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar, @LenWeightTovar - @LenPrefixTovar + 1)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum
    End
    -- получим новый ш/к без веса
   Set @LEFT = SUBSTRING(@DocGoodsBarCode,1,@LenWeightTovar)
    -- получим код товара
   Set @RIGHT = SUBSTRING(@LEFT,3,len(@LEFT)) -- это верно когда ш/к = коду   -- мы будем искать явно ниже
     -- дополним лидирующим нулем если надо
    If Len(@RIGHT) < (@LenWeightTovar - @LenPrefixTovar)
      Set @RIGHT = Dbo.FillLine(RTRIM(LTRIM(@RIGHT)),'0',@LenWeightTovar - @LenPrefixTovar,1 )
    -- окончательно установим
    Set @DocGoodsBarCode  = @LEFT 

Переменная @LEFT имеет тип varchar (20), @DocGoodsBarCode тоже. На последней конструкции выскакивает ошибка преобразовании типа данных varchar к numeric. Вроде все нормально а не могу понять почему.

Сообщение было отредактировано: 27 июл 11, 10:29
27 июл 11, 10:24    [11032282]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Есть мнение, что далеко не на последней.
27 июл 11, 10:29    [11032321]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
Если меняю на Set @DocGoodsBarCode = '000000' ругани нет
27 июл 11, 10:33    [11032345]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Bubuzon,

ну дак посмотрите что там у вас в этой переменной хранится перед преобразованием, или мы за вас должны угадать это?:)
27 июл 11, 10:33    [11032347]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
Остальное все закоментировал
27 июл 11, 10:33    [11032349]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
WarAnt
Bubuzon,

ну дак посмотрите что там у вас в этой переменной хранится перед преобразованием, или мы за вас должны угадать это?:)

В эту процедуру @DocGoodsBarCode попадает из другой Set @DocGoodsBarCode = cast(@TmpStr AS varchar(20))
27 июл 11, 10:37    [11032361]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
В переменной хранится строка штрихкода и до данной конструкции подлежит только чтению, присвоения нет
27 июл 11, 10:47    [11032413]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Bubuzon
If CHARINDEX(SUBSTRING(@DocGoodsBarCode,1,@LenPrefixTovar),@SpecialWeightBarcodePrefixList) > 0
      Set @SpecialWeight = 1
    Set @TmpStr = SUBSTRING(@ImpWeightBarCodesList, @PosLine ,@LenPrefixTovar + 2)
    Set @LenWeightTovar = CAST(SUBSTRING(@TmpStr,len(@TmpStr),1) AS integer)
    If  @SpecialWeight = 0 -- весовой товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar,@digBeforePoint)
      Set @RIGHT = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar + @digBeforePoint,@digAfterPoint)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @RIGHT = '0.'+ @RIGHT
      Set @Rnum = CAST(@RIGHT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum + @Rnum   -- вес товара
    End
    If  @SpecialWeight = 1 -- штучный товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar, @LenWeightTovar - @LenPrefixTovar + 1)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum
    End
    -- получим новый ш/к без веса
   Set @LEFT = SUBSTRING(@DocGoodsBarCode,1,@LenWeightTovar)
    -- получим код товара
   Set @RIGHT = SUBSTRING(@LEFT,3,len(@LEFT)) -- это верно когда ш/к = коду   -- мы будем искать явно ниже
     -- дополним лидирующим нулем если надо
    If Len(@RIGHT) < (@LenWeightTovar - @LenPrefixTovar)
      Set @RIGHT = Dbo.FillLine(RTRIM(LTRIM(@RIGHT)),'0',@LenWeightTovar - @LenPrefixTovar,1 )
    -- окончательно установим
    Set @DocGoodsBarCode  = @LEFT 

Переменная @LEFT имеет тип varchar (20), @DocGoodsBarCode тоже. На последней конструкции выскакивает ошибка преобразовании типа данных varchar к numeric. Вроде все нормально а не могу понять почему.
Ясно, что ошибка - в одной из выделенных мною строк.
Не зная содержимого строковых переменных в момент конвертирования, невозможно сказать что-либо внятное по этому поводу.
27 июл 11, 10:53    [11032451]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
iap
Bubuzon
If CHARINDEX(SUBSTRING(@DocGoodsBarCode,1,@LenPrefixTovar),@SpecialWeightBarcodePrefixList) > 0
      Set @SpecialWeight = 1
    Set @TmpStr = SUBSTRING(@ImpWeightBarCodesList, @PosLine ,@LenPrefixTovar + 2)
    Set @LenWeightTovar = CAST(SUBSTRING(@TmpStr,len(@TmpStr),1) AS integer)
    If  @SpecialWeight = 0 -- весовой товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar,@digBeforePoint)
      Set @RIGHT = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar + @digBeforePoint,@digAfterPoint)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @RIGHT = '0.'+ @RIGHT
      Set @Rnum = CAST(@RIGHT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum + @Rnum   -- вес товара
    End
    If  @SpecialWeight = 1 -- штучный товар
    Begin
      Set @LEFT  = SUBSTRING(@DocGoodsBarCode,1 + @LenWeightTovar, @LenWeightTovar - @LenPrefixTovar + 1)
      Set @Lnum = CAST(@LEFT AS decimal(10,3))
      Set @CalcDocGoodsQuant = @Lnum
    End
    -- получим новый ш/к без веса
   Set @LEFT = SUBSTRING(@DocGoodsBarCode,1,@LenWeightTovar)
    -- получим код товара
   Set @RIGHT = SUBSTRING(@LEFT,3,len(@LEFT)) -- это верно когда ш/к = коду   -- мы будем искать явно ниже
     -- дополним лидирующим нулем если надо
    If Len(@RIGHT) < (@LenWeightTovar - @LenPrefixTovar)
      Set @RIGHT = Dbo.FillLine(RTRIM(LTRIM(@RIGHT)),'0',@LenWeightTovar - @LenPrefixTovar,1 )
    -- окончательно установим
    Set @DocGoodsBarCode  = @LEFT 

Переменная @LEFT имеет тип varchar (20), @DocGoodsBarCode тоже. На последней конструкции выскакивает ошибка преобразовании типа данных varchar к numeric. Вроде все нормально а не могу понять почему.
Ясно, что ошибка - в одной из выделенных мною строк.
Не зная содержимого строковых переменных в момент конвертирования, невозможно сказать что-либо внятное по этому поводу.

Да действительно дело в них, только вроде присвоения на переменную @LEFT нет или CAST при это меняет тип самого аргумента?
27 июл 11, 11:28    [11032703]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Bubuzon
iap
пропущено...
Ясно, что ошибка - в одной из выделенных мною строк.
Не зная содержимого строковых переменных в момент конвертирования, невозможно сказать что-либо внятное по этому поводу.

Да действительно дело в них, только вроде присвоения на переменную @LEFT нет или CAST при это меняет тип самого аргумента?

а что же интересно по вашему делает конструкция CAST(@RIGHT AS decimal(10,3))?
27 июл 11, 11:54    [11032887]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
По задумке разработчиков в весовом штрихкоде должна из строки последних 6 знаков 5 формата 00305 преобразовать в 3.05
27 июл 11, 13:15    [11033599]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bubuzon
По задумке разработчиков в весовом штрихкоде должна из строки последних 6 знаков 5 формата 00305 преобразовать в 3.05

И как вы проверили, что там именно 00305, а не что-то другое ?
27 июл 11, 13:18    [11033620]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
Пардон ошибся преобразование строки формата 0.060 в число
27 июл 11, 13:36    [11033763]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
Bubuzon
Member

Откуда:
Сообщений: 19
Все таки как корректно преобразовать строку типа 0.000 в число?
27 июл 11, 14:42    [11034391]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка преобразовании типа данных varchar к numeric.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Bubuzon
Все таки как корректно преобразовать строку типа 0.000 в число?
SELECT CAST('0.000' AS DEC(10,3))
27 июл 11, 15:01    [11034547]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить