Получение 'Ошибка преобразования типа данных varchar в числовой.' даже после конвертации

Это сообщение об ошибке запускается, когда отправляется сообщение перед отправкой заголовков HTTP (с помощью setcookie или header ). Общие причины вывода чего-либо перед заголовками HTTP:

  • Случайные пробелы, часто в начале или в конце файлов, например:
     
    

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Чтобы избежать этого, просто оставьте закрытие ?> - это не обязательно. g2] в начале файла php. Изучите ваши php-файлы с помощью шестнадцатеричного редактора, чтобы узнать, так ли это. Они должны начинаться с байтов 3F 3C. Вы можете безопасно удалить спецификацию EF BB BF с начала файлов.

  • Явный вывод, например вызовы echo, printf, readfile, passthru, код до и т. д.
  • Предупреждение, выданное php, если установлено свойство display_errors php.ini. Вместо того, чтобы сбой при ошибке программиста, php молча фиксирует ошибку и выдает предупреждение. Хотя вы можете изменить конфигурации display_errors или error_reporting , вы должны скорее исправить эту проблему. Основными причинами являются доступ к неопределенным элементам массива (например, $_POST['input'] без использования empty или isset , чтобы проверить, установлен ли вход) или используя неопределенная константа вместо строкового литерала (как в $_POST[input], обратите внимание на недостающие кавычки).
  • Включение буферизации вывода должно устранить проблему; все выходные данные после вызова ob_start буферизуются в памяти до тех пор, пока вы не отпустите буфер, например. с ob_end_flush .

    Однако, хотя буферизация вывода исключает проблемы, вы должны действительно определить, почему ваше приложение выводит тело HTTP перед заголовком HTTP. Это будет похоже на телефонный звонок и обсуждение вашего дня и погоды, прежде чем сообщить вызывающему, что у него неправильный номер.

    0
    задан marc_s 16 January 2019 в 20:30
    поделиться

    2 ответа

    У вас явно неверные данные. Вы можете найти его, выполнив что-то вроде этого:

    select packslip
    from [A1Warehouse].[dbo].[RF_LOG2]
    where try_cast(l2.PACKSLIP as decimal(22,8)) is null and l2.PACKSLIP is not null;
    

    Что касается вашего запроса, вы можете избежать ошибки, используя try_cast(). Тем не менее, вы должны увидеть реальные проблемы в ваших данных.

    И ваши отношения внешнего ключа должны иметь совпадающие типы и быть должным образом объявлены.

    0
    ответ дан Gordon Linoff 16 January 2019 в 20:30
    поделиться

    похоже, у вас есть данные, которые нельзя преобразовать в число / десятичное число

    привести / преобразовать как varchar

    select top 100 
        pickticket_number,
        date_allocated,
        l2.action
    from  
        [JMNYC-AMTDB].[AMTPLUS].[dbo].PickTickets P (nolock)
    left join
        [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON cast(l2.PACKSLIP as varchar) = cast(p.PickTicket_Number as varchar)
    

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

    с помощью isnumeric

    0
    ответ дан lookslikeanevo 16 January 2019 в 20:30
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: