SQL 不接受 PowerShell 日期格式

Dar*_*te1 3 powershell datetime date environment-variables

我遇到了一个奇怪的问题。当服务器的Region and Language设置设置为时English (United States),包含日期和时间的对象不会出现问题。但是,当我将其更改为我的国家/地区本地时,Dutch (Belgium)我的一些 PowerShell 脚本遇到了问题。

PowerShell 中是否有某个变量需要设置来解决此问题?或者我是否必须始终在服务器上默认为英文日期格式?

例如,我们使用SQL moduleDon Jones 提供的数据来填充 SQL 数据库。此行在设置为荷兰语时会生成错误,但在设置为英语时不会生成错误:

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

我检索日期的唯一方法是Get-Date,没有任何特殊的操作。当设置为以下时,它会生成此错误Dutch (Belgium)

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

我在为Excel工作表生成内容时遇到了同样的问题。它还抱怨日期时间格式。

Dar*_*te1 6

要将字段等信息导出DateTime到 SQL,默认语言设置为English (United States)

因此,当您的Region and Language设置与 SQL 的默认设置不同时,即:English (United States)<> Dutch (Belgium),您应该在代码中使用以下格式以符合英语默认设置:

Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
$_.whenCreated.ToString('yyyy-MM-dd HH:mm:ss')
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是更改 SQL Express 2014 中输入的默认语言:

  1. 右键单击服务器实例并选择Properties > Advanced
  2. 改成Default languageDutch(或您使用的)
  3. 确认Ok
  4. 仍然在SQL Management StudioSecurity > Logins(在数据库下方)
  5. 双击您的user name并选择Dutch如下Default language
  6. 重新启动SQL Management Studio,你应该就可以开始了

结果:Get-Date当您在 PowerShell 代码中 使用 CmdLet 时,它将在将数据传输到 SQL 时按设计工作。SQL 和 Windows 的系统语言仍然是英语,但使用的格式是荷兰语。