哪个表包含列

时间:2018-06-04 14:51:13

标签: c# oracle dataset metadata

有构建select语句的过程,例如

public void GetLog(DataSet dataSet, string tableName, string userCase){
  OracleCommand cmd = new OracleCommand();
  cmd.Connection = conn;
  tmpSql = @"select * from table1 t1
  join table2 on t1.key=t2.key 
  where 1=1 and "+userCase
  cmd.CommandType = CommandType.Text;
  adapter = new OracleDataAdapter(cmd);
  adapter.SelectCommand = cmd;
  adapter.Fill(dataSet, tableName);
}

两个表都构成一个列,例如“NAME”,当userCase类似于“name ='BLABLA'”时,我有异常“ora-00918列模糊定义”。我想将表名添加到userCase中。我如何获取信息哪个表包含此列以将其添加到var userCase“table1.name ='BLABLA'”。 userCase可以包含table1或table2中的任何列。我需要更改过程,以便通过sql或表名

获取元数据

2 个答案:

答案 0 :(得分:1)

好像你已经将tableName作为Method参数传递。如果这是包含来自userCase的列的表,那么您可以编写如下内容:

tmpSql = @"select * from table1 t1

在t1.key = t2.key上加入tablet2   其中1 = 1和" + tableName +"。" + userCase

如果你在多个表中有相同名称的列,那么计算机无法知道你的意思,除非你指定它(通过将其作为userCase的一部分传递,或者像它一样连接它)如上所示)。如果列在单个表中,那么您无需担心。

此致

答案 1 :(得分:0)

需要更改像

这样的sql
tmpSql = @"select * from (select t1.key as t1_key,t2.key as t2_key, t1.name as t1_name,t2.name  as t2_name..... from table1 t1
  join table2 on t1.key=t2.key )
  where t2_name='...'

并且条件userCase应该基于别名