У меня есть данные, которые я получаю через API, который дает мне файл json.Я использую PowerShell для преобразования этого объекта в PowerShell.
$allusers = Get-Content 'test.txt' | Out-String | ConvertFrom-Json
Я беру данные из этого объекта и вставляю их в базу данных SQL Server.У меня проблема в том, что для ключей, которые не существуют в объекте, я хотел бы вставить NULL в базу данных.
Я исследовал другие решения здесь, и большинство предлагает использовать [DBNull]::Value
У меня установлены переменные, если значение не существует для конкретного пользователя в массиве:
$oa_email_id = [DBNull]::Value
$oa_email = [DBNull]::Value
$oa_sms_id = [DBNull]::Value
$oa_sms_phone = [DBNull]::Value
Однако для нулевых значений INT я вставляю 0 и дляпустые значения VARCHAR (max), вставляется пустая строка.Что-то я пропускаю или делаю неправильно?
Вставить в базу данных:
$sql_insert_cmd = New-Object System.Data.SqlClient.SqlCommand
$sql_insert_cmd.CommandText = "
INSERT INTO
TEMP_OMNIALERT_CURRENT_SUBSCRIBERS
(ID_NUM, OA_ID, OA_VALIDATED, OA_ACCOUNT_EXPIRATION_DATE, OA_OPTOUT_DATE, OA_EMAIL_ID,OA_EMAIL, OA_SMS_ID,OA_SMS_PHONE)
VALUES
('"+ $id_num + "', '" +
$oa_id + "', '" +
$oa_validated + "', '" +
$oa_account_expiration_date + "', '" +
$oa_optout_date + "', '" +
$oa_email_id + "', '" +
$oa_email + "', '" +
$oa_sms_id + "', '" +
$oa_sms_phone + "')"
$sql_insert_cmd.Connection = $connection
$execute_insert = $sql_insert_cmd.ExecuteNonQuery()
Создание таблицы:
$sql_insert_cmd.CommandText = "
USE TmsEPly;
DROP TABLE IF EXISTS TEMP_OMNIALERT_CURRENT_SUBSCRIBERS;
CREATE TABLE
TEMP_OMNIALERT_CURRENT_SUBSCRIBERS
(
SUBMISSION_ID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ID_NUM VARCHAR(MAX) NOT NULL,
OA_ID INT NOT NULL,
OA_VALIDATED INT NOT NULL,
OA_ACCOUNT_EXPIRATION_DATE VARCHAR(MAX) NOT NULL,
OA_OPTOUT_DATE VARCHAR(MAX) NOT NULL,
OA_EMAIL_ID INT NULL,
OA_EMAIL VARCHAR(MAX) NULL,
OA_SMS_ID INT NULL,
OA_SMS_PHONE VARCHAR(MAX) NULL
)"