2014-07-31 2 views
1

У меня возникла странная проблема. Если для параметров сервера Region and Language установлено значение English (United States), то нет проблем с объектами, содержащими дату и время. Но когда я меняю его в свои страны local Dutch (Belgium) У меня возникают проблемы в некоторых сценариях PowerShell.Формат даты PowerShell не принят в SQL

Есть ли где-то переменная в PowerShell, которая должна быть установлена, чтобы исправить это? Или я постоянно использую стандартные форматы даты на сервере?

Мы используем, например, SQL module, предоставленный Доном Джонсом для заполнения базы данных SQL. Эта линия выдает ошибку, когда он установлен на голландском языке, но не тогда, когда он установлен на английском языке:

if ($properties[$property] -eq 'datetime2') { [datetime]$prop = $result.GetDateTime($result.GetOrdinal($property)) } 

Единственное, что я сделать, чтобы получить дату на Get-Date без чего-либо. И он генерирует эту ошибку при установке на Dutch (Belgium):

Exception calling "ExecuteNonQuery" with "0" argument(s): "Conversion failed when converting date and/or time from char 
acter string." 

я испытал те же проблемы при создании материала для Excel листов. Он также жалуется на формат даты.

+0

Посмотрите эту тему раз http://stackoverflow.com/questions/2379514/powershell-formatting-values-in-another-culture – Rahul

+0

Спасибо Рахул, я знал об этом обходном пути. Но почему он не просто принимает '[datetime]' так же, как используется 'Get-Date'? Он должен нормально работать без добавления дополнительных функций, нет? – DarkLite1

+0

AFAIK, по умолчанию должен быть формат 'en-us'. вы просто пытаетесь отформатировать результат 'get-date'? – Rahul

ответ

2

Для экспорта информации, такой как DateTime полей в SQL, используются настройки по умолчанию English (United States).

Так что, когда ваши Region and Language настроек отличаются от значений по умолчанию для SQL, являются: English (United States) <>Dutch (Belgium), вы должны использовать следующий формат код, чтобы соответствовать английскому по умолчанию:

"Key" = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") 
"Key" = $_.whenCreated.ToString("yyyy-MM-dd HH:mm:ss") 

Другим решением является изменить язык по умолчанию для входа в SQL Express 2014:

  1. правой кнопкой мыши на экземпляре сервера и выберите Properties > Advanced
  2. Изменение Default language к Dutch (или то, что вы используете)
  3. Подтвердить Ok
  4. Все еще в SQL Management Studio перейти к Security > Logins (ниже Databases)
  5. Дважды щелкните user name и выберите Dutch ниже как Default language
  6. Restart SQL Management Studio и вы должно быть хорошо, чтобы пойти

Результат: Когда вы используете CmdLet Get-Date в коде PowerShell, он будет работать так же, как и при передаче данных на SQL. Системный язык для SQL и Windows по-прежнему остается английским, но используемое форматирование - голландский.

+0

Только что подтвердил это, я заметил, что это не было помечено как ответ, поэтому я просто хотел опубликовать, что это действительно работает и разрешило мою проблему. –

Смежные вопросы