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