I'm trying to write SQL statement to insert multiple rows in batch with parameters into table only when the row doesn't exist in the target table.
I have a problem how to pass parameter markers into SQL query. When I use the code below I got exception: "SQL0584 NULL or parameter marker in VALUES not allowed."
using (var conn = new iDB2Connection(_connectionString)) {
await conn.OpenAsync();
using (var tran = conn.BeginTransaction()) {
using (var cmd = conn.CreateCommand()) {
cmd.Transaction = tran;
cmd.CommandText = @"
MERGE INTO TableXYZ AS mt
USING (
VALUES(@column1, @column2)
) AS vt(Column1, Column2)
ON (
mt.Column1 = vt.Column1 AND mt.Column2 = vt.Column2
)
WHEN NOT MATCHED THEN
INSERT (Column1, Column2) VALUES (vt.Column1, vt.Column2)
";
cmd.DeriveParameters();
foreach (var item in items) {
cmd.Parameters["@column1"].Value = item.Column1;
cmd.Parameters["@column2"].Value = item.Column2;
cmd.AddBatch();
}
await cmd.ExecuteNonQueryAsync();
}
tran.Commit();
}
}
Any suggestions, please?
The question is How to pass parameter markers into MERGE query. There is no problem with c# code and it's not helpful to send answers how to pass parameters in INSERT or UPDATE statements.
Thanks.