SQL Server 2005 Express не может обновить поле даты и времени, если для окон установлен итальянский

Я борюсь с проблемой MS SQL 2005 Express. Запрос, подобный приведенному ниже, отлично работает, когда для региональных параметров Windows (панель управления) установлен английский (США), но он не работает, если задан итальянский (и, возможно, другие языки).

UPDATE MyTable SET StartDate='2009-07-14 12:05:30' WHERE ID=7

Я пробовал также много разных форматов даты и времени, таких как ISO 8601:

yyyy-MM-ddTHH:mm:ss

(см. также: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes)

Ни один из этих форматов не работает, кроме yyyyMMdd, но тогда я теряю время, что неприемлемо.

Также выполнение этого запроса первым не имеет значения:

SET LANGUAGE us_english

PS: Я выполняю запрос из программы .Net, но SQL Server Management Studio дает тот же результат: он не может преобразовать строку во время данных. Как только настройки снова вернутся к американскому английскому, он снова заработает.

Как заставить этот запрос работать с другими языковыми настройками?


person Roy    schedule 13.07.2009    source источник


Ответы (3)


Вы должны использовать даты, не зависящие от региона. В SQL Server вы можете сделать это:

UPDATE MyTable SET StartDate={ts '2009-07-14 12:05:30'} WHERE ID=7

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

person Philippe Leybaert    schedule 13.07.2009

Вы пробовали формат ггггммдд чч: мм: сс?

UPDATE MyTable SET StartDate='20090714 12:05:30' WHERE ID=7
person AdaTheDev    schedule 13.07.2009
comment
Извините, это не сработало, но теперь я думаю, что это произошло потому, что VB.net заменил: на .. Не знаю почему. - person Roy; 13.07.2009

После нескольких часов попыток я нашел решение. Формат ISO 8601 отлично работает в MS SQL, но что-то пошло не так с форматированием даты в VB.net.

Сначала я использовал следующий спецификатор формата:

Уменьшить dateString как String = aDate.ToString ("yyyy-MM-ddTHH: mm: ss")

Однако почему-то в результате получается что-то вроде «2009-07-14T12.05.30» вместо «2009-07-14T12: 05: 30», поэтому точки вместо «:»!

Когда используешь

Уменьшить dateString как String = aDate.ToString ("s")

Применен правильный формат: «2009-07-14T12: 05: 30».

person Roy    schedule 13.07.2009