I have data that I grab via an API that gives me a json file. I use PowerShell to convert this to a PowerShell object.
$allusers = Get-Content 'test.txt' | Out-String | ConvertFrom-Json
I take data from this object and insert it into a SQL Server database. The problem I'm having is that for keys that don't exist in the object, I would like to insert a NULL into the database.
I've explored other solutions here, and most suggest using [DBNull]::Value
I have variables set as such if the value doesn't exist for the specific user in the array:
$oa_email_id = [DBNull]::Value
$oa_email = [DBNull]::Value
$oa_sms_id = [DBNull]::Value
$oa_sms_phone = [DBNull]::Value
However for null INT values, I get a 0 inserted and for null VARCHAR(max) values, a blank string gets inserted. Is there something I'm missing or doing incorrectly?
Insert to database:
$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()
Table create:
$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
)"