我可以用Firebird 3多次插入:
INSERT INTO ECHELONS (N_EMPLOYE, ECHELON, INDICE, "DATE", TYPE_PROMO,NOTE, REMARQUE) VALUES( @P10, @P11, @P12, @P13, @P14, @P15, @P16);
INSERT INTO ECHELONS (N_EMPLOYE, ECHELON, INDICE, "DATE", TYPE_PROMO,NOTE, REMARQUE) VALUES( @P790, @P791, @P792, @P793, @P794, @P795, @P796);或者说:
INSERT INTO ECHELONS (N_EMPLOYE, ECHELON, INDICE, "DATE", TYPE_PROMO,NOTE, REMARQUE) VALUES( @P10, @P11, @P12, @P13, @P14, @P15, @P16),( @P790, @P791, @P792, @P793, @P794, @P795, @P796);我使用的是C#,我得到了以下错误:
错误:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 117
INSERT如果我这样做(从性能上讲),该怎么办?
FbTransaction fbTransaction = fb.BeginTransaction() ;
for (int i = 0; i < length; i++)
{
FbCommand fbCommand = new FbCommand();
fbCommand.Transaction = fbTransaction;
fbCommand.Connection = fb;
fbCommand.CommandText = insertSql;
fbCommand.ExecuteNonQuery();
}
fbTransaction.Commit();在数据库的多重访问情况下,这会给我带来什么问题吗?
发布于 2022-11-08 10:07:35
不,你不能直接这么做。
您的第一次尝试是不可能的,因为您只能一次执行一个语句,而不能执行两个。除非您使用FbScript组件,但随后不能参数化。
您的第二次尝试是不可能的,因为Firebird不幸地不支持多行的表值构造函数。
你的选择是:
EXECUTE BLOCK与多个语句一起使用,例如
执行块(p10整数= ?,p11 varchar(50) = ?,p20整数= ?,p21 varchar(50) = ?)作为开始插入到可生长值(col1,col2)值(:p10,:p11);插入到sometable(col1,col2)值(:p20,:p21);第二个选项有许多限制,例如所有参数的大小不能超过64 in,所以如果您有非常宽的行要插入,这将限制可以在单个块中插入的行数。
https://stackoverflow.com/questions/74358630
复制相似问题