Экспорт базы данных завершается неудачно, когда я пытаюсь экспортировать этот формат '2020-04-13 14:13:54' - PullRequest
0 голосов
/ 13 апреля 2020

Когда я пытаюсь выполнить эту вставку

INSERT INTO BCS_EXPEDIENTES_REGISTRADOS (FOLIO, DOCUMENTO, FECHA_REGISTRO_DPS, CANT_PAGINAS) 
VALUES ('24', 'Suc4437_X722INSURGEN_20200305033042.tiff', '2020-04-13 14:13:54', '79') 

я получаю сообщение об ошибке:

Преобразование типа данных varchar в тип данных datetime привело к значения диапазона.

Процесс:

  • У меня есть пример значения: 04/13/2020 09: 13: 41
  • I преобразовать это значение в этот формат: = формат ([G_RECEPCION], "гггг-мм-дд ЧЧ: мм: сс") в 2020-04-13 14: 13: 54
  • Но когда я выполняю INSERT, он выдает эту ошибку.

Есть идеи для этого случая? Мне нужно экспортировать дату и время в этом формате на SQL Сервер гггг-ММ-дд ЧЧ: мм: сс

1 Ответ

0 голосов
/ 05 мая 2020

Позвольте мне начать с того, что datetime не имеет понятия формата отображения.
Формат отображения имеет значение, только когда мы говорим о строковых представлениях значений даты и времени.

Тогда , давайте взглянем на используемый вами формат: yyyy-MM-dd HH:mm:ss (известный как ODB C canonical).
При преобразовании строк этого формата в DateTime результат преобразования зависит от культуры. Это означает, что при работе на некоторых языках (например, Engli sh) SQL Сервер будет пытаться использовать yyyy-MM-dd в качестве даты, но на других языках (например, немецком) он будет пытаться использовать yyyy-dd-MM в качестве даты.
Это причина, по которой вы получаете ошибку конвертации.

Важное примечание: Если вы явно не установите язык (или DateFormat, если на то пошло), SQL Сервер будет использовать язык входа по умолчанию - поэтому для некоторых пользователей преобразование может завершиться неудачно в то время как для других пользователей это будет успешным.

Другое замечание: эта проблема существует только с DateTime, но не с DateTime2 - преобразование этого формата в DateTime2 всегда будет интерпретируется как yyyy-MM-dd.

Итак, учитывая всю эту информацию, у вас есть три варианта:

  1. Прекратить использование DateTime, вместо этого используйте DateTime2.
  2. Вместо при использовании небезопасного канонического формата ODB C используйте безопасный формат ISO8601 всякий раз, когда имеете дело со строковым представлением значений даты и времени: yyyy-mm-ddThh:mi:ss.mmm.
  3. Явно язык установки или формат даты (к ymd) перед вашим оператором вставки.

Я бы порекомендовал объединить первые два и, по возможности, избегать использования третьего.
DateTime2 является лучшим типом данных, чем * 1 044 * и ISO 8601 - это универсальный стандарт, который поддерживается на разных платформах и языках как однозначный формат даты и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...