Я пытаюсь загрузить данные в формате Json в SQL Сервер с помощью процедуры сохранения в хранилище с помощью PowerShell
Ниже приведен сбой JSON Data
{
"id":"2aa7ce44-2ac1-4efb-a5df-6c34086744b7",
"isReadOnly":false,
"isOnDedicatedCapacity":false,
"capacityMigrationStatus":"",
"type":"Group",
"state":"Active",
"name":"Wes' Test Team",
"dashboards":[],
"reports":[],
"datasets":[],
"users":[]
},
{
"id":"cb876bcc-285a-40d7-a120-f23e73baafe8",
"isReadOnly":false,
"isOnDedicatedCapacity":false,
"capacityMigrationStatus":"",
"type":"Group",
"state":"Active",
"name":"Kehat's Corner",
"dashboards":[],
"reports":[],
"datasets":[],
"users":[]
}
вставить данные, потому что имя столбца содержит '(APOSTROPHE), и скрипт не может загрузить данные.
Может кто-нибудь помочь мне, как преодолеть, если имя столбца имеет APOSTROPHE в данных.
Сценарий PowerShell
Connect-PowerBIServiceAccount
$PBIGroupsFile = "C:\TEMP\PBIGroupsExpanded.json"
$ActiveGroupsURLExPersonal = '/admin/groups?$top=5000&' + '$filter=type ne' + " 'PersonalGroup'" + '&$expand=dashboards,reports,datasets,users'
Invoke-PowerBIRestMethod -Url $ActiveGroupsURLExPersonal -Method Get | Out-File $PBIGroupsFile
Хранимая процедура
ALTER PROCEDURE [dbo].[InsertInventoryDataFromAPI_Temp]
@JSON NVARCHAR(MAX)
AS
BEGIN
DECLARE @PARSSEDJSON NVARCHAR(MAX)= SUBSTRING(@JSON,CHARINDEX('"value":',@JSON)+8,LEN(@JSON)-CHARINDEX('"value":[',@JSON)-10)
select ROW_NUMBER () OVER (ORDER BY id) AS RowNum,* INTO #FLJSON
FROM OPENJSON(REPLACE(REPLACE(@PARSSEDJSON, CHAR(13)+CHAR(10), ''),'''',''))
WITH(
id nvarchar(max) '$.id',
isReadOnly nvarchar(max) '$.isReadOnly',
isOnDedicatedCapacity nvarchar(max) '$.isOnDedicatedCapacity',
capacityId nvarchar(max) '$.capacityId',
capacityMigrationStatus nvarchar(max) '$.capacityMigrationStatus',
type nvarchar(max) '$.type',
state nvarchar(max) '$.state',
name nvarchar(max) '$.name',
dashboards nvarchar(max) '$.dashboards' AS JSON,
reports nvarchar(max) '$.reports' AS JSON,
datasets nvarchar(max) '$.datasets' AS JSON,
users nvarchar(max) '$.users' AS JSON
)
--Load Workspace Info
INSERT INTO dbo.Workspace_temp
Select id, isReadOnly,isOnDedicatedCapacity,capacityId,capacityMigrationStatus,type,state,name from #FLJSON
Вызов хранимой процедуры с использованием PowerShell
$JSON = Get-Content "C:\TEMP\PBIGroupsExpanded.json"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLServer;Database=$SQLDBName;Integrated Security=True;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "EXEC [dbo].[InsertInventoryDataFromAPI_Temp] '$JSON'"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$SqlConnection.Open()
$SQLReturn=$SQLCmd.ExecuteNonQuery()
$SqlConnection.Close()