使用 PowerShell 从 SQL Server 导出到 json 文本文件

use*_*806 2 powershell json powershell-4.0

如果您想了解如何将 SQL Server 数据转换为 JSON 并将其放入文本 .json 文件中,则应该阅读此内容:

问题:

有人能告诉我这段代码有什么问题吗?我的目标是从 SQL Server 表中读取数据,将其转换为 JSON,然后将结果保存为 JSON 文本文件。代码运行但生成的.json文件只有:

{
        "FieldCount":  11
    },
    {
Run Code Online (Sandbox Code Playgroud)

一遍又一遍地重复,仅此而已。

我的代码:

$instance = "localhost\SQLEXPRESS"
$connectionString = "Server=$Instance; Database=myDB;Integrated Security=True;"
$query = "Select  * from myTable"
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = $query
$result = $command.ExecuteReader()
$result | ConvertTo-Json | Out-File "file.json"

$connection.Close()
Run Code Online (Sandbox Code Playgroud)

更新

将奖励 postanote 的答案,因为从技术上讲,他/她回答了我原来的问题(尽管我会警告并说我还没有尝试过)。

不过,我会推荐 Mike 的答案或我最终使用 BCP 的答案:

bcp "select * from myTable FOR JSON AUTO" queryout "C:\filepath\testsml.json"  -c -S ".\SQLEXPRESS" -d myDBName -T
Run Code Online (Sandbox Code Playgroud)

Mik*_*Twc 7

如果您使用的是 sql server express 2016 或更高版本,您应该能够使用 FOR JSON 子句在数据库端执行此操作。尝试类似的东西

$instance = "localhost\SQLEXPRESS"
$connectionString = "Server=$Instance; Database=myDB;Integrated Security=True;"
$query = "Select  * from myTable FOR JSON AUTO"
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = $query
$command.ExecuteScalar() | Out-File "file.json"
Run Code Online (Sandbox Code Playgroud)


pos*_*ote 5

尝试像这样的 \xe2\x80\xa6

\n\n
### Exporting SQL Server table to JSON\n\nClear-Host\n\n#--Establishing connection to SQL Server --# \n\n$InstanceName = "."\n$connectionString = "Server=$InstanceName;Database=msdb;Integrated Security=True;"\n\n#--Main Query --# \n\n$query = "SELECT * FROM sysjobs"\n\n$connection = New-Object System.Data.SqlClient.SqlConnection\n$connection.ConnectionString = $connectionString\n\n$connection.Open()\n$command = $connection.CreateCommand()\n$command.CommandText = $query\n\n$result = $command.ExecuteReader()\n\n$table = new-object "System.Data.DataTable"\n\n$table.Load($result)\n\n#--Exporting data to the screen --# \n\n$table | select $table.Columns.ColumnName | ConvertTo-Json\n\n$connection.Close()\n\n# Results\n\n{\n    "job_id":  "5126aca3-1003-481c-ab36-60b45a7ee757",\n    "originating_server_id":  0,\n    "name":  "syspolicy_purge_history",\n    "enabled":  1,\n    "description":  "No description available.",\n    "start_step_id":  1,\n    "category_id":  0,\n    "owner_sid":  [\n                      1\n                  ],\n    "notify_level_eventlog":  0,\n    "notify_level_email":  0,\n    "notify_level_netsend":  0,\n    "notify_level_page":  0,\n    "notify_email_operator_id":  0,\n    "notify_netsend_operator_id":  0,\n    "notify_page_operator_id":  0,\n    "delete_level":  0,\n    "date_created":  "\\/Date(1542859767703)\\/",\n    "date_modified":  "\\/Date(1542859767870)\\/",\n    "version_number":  5\n}\n
Run Code Online (Sandbox Code Playgroud)\n