【问题标题】:SQL ORACLE - Datatable in where clauseSQL ORACLE - where 子句中的数据表
【发布时间】:2011-02-18 16:56:38
【问题描述】:

目前我有一个从 MSSQL 数据库返回数据集的 sql 调用,我想从该数据中获取一列,并根据 ORACLE 数据库中的该列返回 ID。我可以一次执行此操作,但这需要多次调用,我想知道是否可以通过一次调用来完成。

String sql=String.Format(@"Select DIST_NO
    FROM DISTRICT
    WHERE DIST_DESC = '{0}'", row.Table.Rows[0]["Op_Centre"].ToString());

上面是我用来一次返回一个 ID 的字符串。我知道 {0} 可用于将您的值格式化为字符串,也许有一种方法可以使用数据表来做到这一点。

还要在 where 子句中使用多个值:

String sql=String.Format(@"Select DIST_NO
   FROM DISTRICT
   WHERE DIST_DESC in ('{0}')", row.Table.Rows[0] ["Op_Centre"].ToString());

虽然我意识到所有这些都可以完成,但我想知道是否有一种简单的方法可以在一次调用中将其全部添加到 sql 字符串中。

在写这篇文章时,我意识到我可以将字符串分成多个部分,然后只需将每一行值添加到“WHERE DIST_DESC IN (”子句中的 SQL 字符串...

我仍然很想知道是否有其他方法,因为其他人可能会遇到这个问题,如果我开发了一个解决方案,我会发布一个解决方案。

提前致谢。

【问题讨论】:

  • 不是你问的,这也是为什么这是一个评论,但是:不要以为你的MSSQL数据库可以设置看到Oracle数据库,可以吗?您可以使用 SQL Server 上的 Oracle/ODBC 驱动程序将 Oracle 数据库添加为链接服务器,并使用链接服务器或 OpenQuery 语法直接将其加入。然后您可以完全在 MSSQL 中编写查询并在 SQL Server 上调用它,SQL Server 将处理与 Oracle 的对话并将数据拖回......

标签: c# sql oracle datatable


【解决方案1】:

K 我明白问一个问题然后自己回答是没有意义的,但是通过问这个问题我意识到了答案。

String sql = "Select DIST_NO FROM DISTRICT WHERE DIST_DESC in ('" +ds.Tables[0].Rows[0]["Op_Centre"].ToString()+"'";

for (int i = 1; i

{ sql +=",'"+ds.Tables[0].Rows[i]["Op_Centre"].ToString()+"'";

} sql += ")";

我仍然很好奇是否有更好的方法......

【讨论】:

    【解决方案2】:

    您可以做的最与 RDBMS 无关的方法是创建一个临时表。然后直接查询:select * from district where dist_desc in (select dist_desc from temp_table)

    Oracle http://forums.oracle.com/forums/thread.jspa?threadID=930372 中有一个解决方案,但我的盒子里没有 Oracle,所以我无法尝试它在 .NET 中的工作方式。

    已经在 Postgresql http://fxjr.blogspot.com/2009/05/npgsql-tips-using-in-queries-with.html 中尝试过,非常无缝地支持将值与列表进行比较

    如果你要使用动态查询方法,试试这个:

    String sql=String.Format(@"Select DIST_NO
    FROM DISTRICT
    WHERE DIST_DESC IN ({0})", 
      string.Join( ",",
          ds.Tables[0].Select()
          .Select(r => "'" + (string)r["Op_Centre"] + "'").ToArray() ) // string.Join
      ); // string.Format
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2014-06-15
      • 2021-10-27
      相关资源
      最近更新 更多