Есть ли хороший способ отладки & ldquo; Строковые или двоичные данные будут обрезаны? & Rdquo;

Если у вас установлен ReSharper, вы также можете настроить быстрые клавиши быстрого доступа Visual Studio «Alt-Right» и «Alt-Left» для CamelHump, не теряя стандартного поведения Visual Studio для «ctrl-right» и «ctrl-left».

Подробности здесь: http://davidrcook.wordpress.com/2009/11/05/working-with-camel-case-in-visual-studio/

24
задан harpo 14 July 2010 в 17:12
поделиться

5 ответов

Я не могу придумать хороший способ.
Однажды я потратил много времени на отладку очень информативного сообщения "Деление на ноль".

Обычно вы раскомментируете различные части кода вывода, чтобы найти ту, которая вызывает проблемы.
Затем вы берете найденный фрагмент и заставляете его возвращать значение, которое указывает на наличие проблемы, вместо фактического значения (в вашем случае нужно заменить строку вывода на len(of the output)). Затем вручную сравните с длиной столбца, в который вы вставляете.

0
ответ дан 28 November 2019 в 21:47
поделиться

Быстрый и грязный способ исправить это - выбрать строки в новой физической таблице следующим образом:

SELECT * INTO dbo.MyNewTable FROM <the rest of the offending query goes here>

... и затем сравнить схему этой таблицы со схемой таблицы, в которую ранее входил INSERT, и ищите столбцы большего размера.

18
ответ дан 28 November 2019 в 21:47
поделиться

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

Это должно сработать, если вам просто нужно определить, какое поле вызывает проблему. Я не знаю, есть ли лучший способ сделать это.

1
ответ дан 28 November 2019 в 21:47
поделиться

по номеру строки в сообщении об ошибке вы сможете определить запрос insert, который вызывает ошибку. Измените его в запрос select, чтобы включить AND LEN(your_expression_or_column_here) > CONSTANT_COL_INT_LEN для строк различных столбцов в вашем запросе. посмотрите на вывод, и это даст вам плохие строки.

0
ответ дан 28 November 2019 в 21:47
поделиться

Технически нет строки, на которую можно было бы указать, потому что SQL не записывал данные в таблицу.Обычно я просто фиксирую трассировку, запускаю ее Query Analyzer (если проблема уже не очевидна из трассировки, что может быть в данном случае) и быстро отлаживаю ее с помощью старинного метода «изменить мое ОБНОВЛЕНИЕ на SELECT». Разве это не сводится к одному из двух:

a) Определение вашего столбца неверно, и необходимо изменить ширину б) Ваше определение столбца правильное, и приложение должно быть более защищенным

?

0
ответ дан 28 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

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