Преобразование типа данных char в тип данных datetime привело к значению datetime вне диапазона

У меня есть запрос ниже, выдавая ошибку, что преобразование типа данных char в тип данных datetime привело к значению datetime вне диапазона.

INSERT INTO ACCount (DocumentNo, AccNo, DueDate, [Description], DC, Amount, Amount1, Amount2, DateCreated, DateModified, [Type]) VALUES (40, 6000012, '14 / 12/2012 12:00:00 AM ', N '', N'C ', 365.70, 551292.750000000, 365.700000000, '14 / 12/2012 12:00:00 AM', '14 / 12/2012 12:00:00 AM ', N'PI')

Невозможно узнать, в чем именно заключается ошибка.

Как я могу решить это?

Заранее спасибо.

2 ответа

"14/12/2012" - это 12-й день 14-го месяца на большинстве серверов. Вы должны будете использовать правильную спецификацию формата для представления дат или, что лучше, (но только в коде приложения): передавайте его только как параметр, используя естественное представление даты в вызывающем коде (тогда строки никогда не бывает представление, поэтому оно никогда не бывает двусмысленным).

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

'14 Dec 2012 12:00:00 AM'

Вы используете неоднозначный формат даты и времени, и значения по умолчанию для ваших региональных настроек означают, что он не принимает его. Пытаться:

INSERT INTO ACCount (DocumentNo, AccNo, DueDate, [Description], DC, Amount,
       Amount1, Amount2, DateCreated, DateModified, [Type])
VALUES (40, 6000012, '2012-12-14T12:00:00 AM', N'', N'C', 365.70, 551292.750000000, 
        365.700000000, '2012-12-14T12:00:00 AM', '2012-12-14T12:00:00 AM', N'PI')

Конечно, учитывая, что все компоненты времени полночь, вы можете просто использовать 20121214 (это однозначный формат только для даты)

Другие вопросы по тегам