从.NET错误执行动态SQL

2020-09-22 07:39发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在尝试从.NET在HANA中检查表是否存在。 所以我写了一个动态SQL,但是执行它会导致以下错误:

必须声明

标识符:1:在Sap.Data.Hana.HanaCommand.ExecuteScalar(Sap.Data.Hana.HanaCommand._ExecuteReader(CommandBehavior commandBehavior,Boolean isExecuteScalar,Boolean isBeginExecuteReader)中位于第8行第21列 )

这是我要构建的代码:

>代码以执行代码

使用(HanaCommand cmd =新的HanaCommand(sql,conn))
 {
     conn.Open();
     int ret =(int)cmd.ExecuteScalar();
     返回ret
 }
 

>构建要执行的SQL的代码:

 StringBuilder sql = new StringBuilder();
 sql.AppendFormat(
   @"做
       开始
       声明行数INT;
       从table_name如'my_table'和schema_name ='my_schema'的表中选择count(*)进入行计数;
       如果:rowcount = 0则
          从哑元中选择0;
       其他
          从假人中选择1;
       万一;

     结束;");
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在尝试从.NET在HANA中检查表是否存在。 所以我写了一个动态SQL,但是执行它会导致以下错误:

必须声明

标识符:1:在Sap.Data.Hana.HanaCommand.ExecuteScalar(Sap.Data.Hana.HanaCommand._ExecuteReader(CommandBehavior commandBehavior,Boolean isExecuteScalar,Boolean isBeginExecuteReader)中位于第8行第21列 )

这是我要构建的代码:

>代码以执行代码

使用(HanaCommand cmd =新的HanaCommand(sql,conn))
 {
     conn.Open();
     int ret =(int)cmd.ExecuteScalar();
     返回ret
 }
 

>构建要执行的SQL的代码:

 StringBuilder sql = new StringBuilder();
 sql.AppendFormat(
   @"做
       开始
       声明行数INT;
       从table_name如'my_table'和schema_name ='my_schema'的表中选择count(*)进入行计数;
       如果:rowcount = 0则
          从哑元中选择0;
       其他
          从假人中选择1;
       万一;

     结束;");
 
付费偷看设置
发送
5条回答
悠然的二货
1楼-- · 2020-09-22 08:05

我想对此有一个初步的答案。 解释此SQL的方式是通过将每行(用;分隔)作为自己的命令来执行。

这可能是ExecuteScaler命令的行为。 因此,所有多行逻辑都应改为使用ExecuteNonQuery执行。 我将在下一个尝试。

Baoming ROSE
2楼-- · 2020-09-22 08:03

为什么在这里使用动态SQL? 带有参数的SELECT可以很好地完成这项工作。

ZJXianG
3楼-- · 2020-09-22 08:03

很有趣的是,这个问题被否决了。 对于SAP SQL无法做的事情:)

CPLASF-自律
4楼-- · 2020-09-22 08:06

动态SQL在这里仅用作测试平台-我的要求是从.NET创建表(如果缺少的话)。

我粘贴的这段代码仅用于测试第1部分,表的存在。

不幸的是,我回到了方格1。我再次收到"必须声明标识符"错误。

Alawn_Xu
5楼-- · 2020-09-22 08:05

是的,这确实很简单。 但是请记住,只要将自己限制在原始代码中的以下内容,我就可以用更少的行数实现相同的目标:

从table_name(例如" my_table"和schema_name =" my_schema")的表中选择count(*); 

注意我只是删除了变量" rowcount"? 如果要获得表的存在是我的目的,那就是我要做的一切。 但是正如我在较早的评论中提到的那样。 目标是实际创建该表(如果不存在)。

这就是为什么我需要添加类似脚本的逻辑并通过ExecuteNonQuery执行的原因。 表的定义是动态的,并且是基于配置的,但是一旦找到一种有条件地创建表本身的方法,我将在以后处理。

一周热门 更多>