Кажется, этот вопрос задают много, но ни один из ответов не дал мне результатов. Я дергаю себя за волосы ... надеюсь, у кого-то есть ответ.
У меня есть рабочий сервер под управлением SQL Server 2005. Я создал резервную копию базы данных и восстановил ее на экземпляре SQL Server Express моего ноутбука. Теперь даты запросов серьезно пострадали. В прод. На сервере все они хранятся в формате «13.04.2011, 12:00:00», но на моем ноутбуке они отображаются как «2011-04-14 00: 00: 00.000». Когда я выполняю запрос, пытаясь найти записи «14.04.2011», мой ноутбук выдает ошибку « Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона ». Редактировать : Этот точный запрос отлично работает на производственном сервере SQL. (Я использую SSMS для выполнения запросов ... не приложение / код)
Я убедился, что региональные настройки Windows на моем ноутбуке совпадают с настройками сервера (английский (США)), и все на панели управления «Регион и язык» точно такое же.
Наконец я выполнил следующие два запроса:
select name ,alias, dateformat
from syslanguages
where langid =
(select value from master..sysconfigures
where comment = 'default language')
select @@language
Что дало результат "* us_english, English, mdy *" ..... и " British " соответственно. Откуда этот британец? Теперь, когда я запускаю эту команду перед моим запросом (в студии управления)
SET DATEFORMAT mdy
Тогда все работает отлично! Но в запросе syslanguages это, кажется, уже формат mdy. Я не собираюсь переписывать мое приложение "SET DATEFORMAT" повсеместно - так что, надеюсь, у кого-то есть подсказка. Может быть, моя установка SQL Express прервана, и я должен переустановить ее?
Я буду продолжать возиться с надеждой заставить это работать.