1
私は、行がターゲットテーブルに存在しない場合にのみ、パラメータを含む複数の行をテーブルに挿入するSQL文を作成しようとしています。C#ADO.NETのパラメータを使用してDB2 iSeriesにローをアップカウントする方法は?
SQL照会にパラメーター・マーカーを渡す方法に問題があります。以下のコードを使用すると例外が発生します。 "SQL0584 VALUESのNULLまたはパラメータ・マーカーは使用できません。
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();
}
}
お願いします。
質問はです。どのようにMERGEクエリにパラメータマーカーを渡すか。 C#コードに問題はなく、INSERTステートメントまたはUPDATEステートメントでパラメータを渡す方法を回答することは役に立ちません。
ありがとうございました。
可能な複製(https://stackoverflow.com/questions/2374698/parameterized-db2-query-from-net) – BugFinder
なぜそれが役に立つのではないでしょうか?パラメータは、すべてのSQL文タイプに対して同じ方法で渡されます。 – jmarkmurphy
'VALUES'節に明示的なデータ型情報を提供してください。 VALUES(CAST(@ column1 AS VARCHAR(100))、CAST(@ column2 AS INTEGER)) '(適切なデータ型を使用します)。 – mustaccio