首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebird 3多次插入

Firebird 3多次插入
EN

Stack Overflow用户
提问于 2022-11-08 09:46:55
回答 1查看 51关注 0票数 1

我可以用Firebird 3多次插入:

代码语言:javascript
复制
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);

或者说:

代码语言:javascript
复制
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#,我得到了以下错误:

错误:

代码语言:javascript
复制
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 117
INSERT

如果我这样做(从性能上讲),该怎么办?

代码语言:javascript
复制
 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();

在数据库的多重访问情况下,这会给我带来什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-08 10:07:35

不,你不能直接这么做。

您的第一次尝试是不可能的,因为您只能一次执行一个语句,而不能执行两个。除非您使用FbScript组件,但随后不能参数化。

您的第二次尝试是不可能的,因为Firebird不幸地不支持多行的表值构造函数。

你的选择是:

  1. 准备一条语句并使用火鸟的ADO.NET提供者9.0.0.0中引入的批处理执行工具。我对这个API本身没有经验,所以我无法演示如何使用它。据我所知,它现在也是一个低级别的API,因此它可能需要更多的改进来提高可用性。
  2. EXECUTE BLOCK与多个语句一起使用,例如 执行块(p10整数= ?,p11 varchar(50) = ?,p20整数= ?,p21 varchar(50) = ?)作为开始插入到可生长值(col1,col2)值(:p10,:p11);插入到sometable(col1,col2)值(:p20,:p21);

第二个选项有许多限制,例如所有参数的大小不能超过64 in,所以如果您有非常宽的行要插入,这将限制可以在单个块中插入的行数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74358630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档