【问题标题】:How to determine ODBC supported join operators - Cross Join如何确定 ODBC 支持的连接运算符 - 交叉连接
【发布时间】:2015-10-29 21:18:24
【问题描述】:

给定一个 ODBC 连接字符串,我正在尝试确定此连接是否支持交叉连接。

目前我使用以下代码来确定支持的连接运算符:

(SupportedJoinOperators)connection.GetSchema("DataSourceInformation").Rows[0]["SupportedJoinOperators"]

但这只会给我内、左、右和全连接。

例如,如果连接字符串使用 microsoft 文本驱动程序 (.txt .csv),则支持的连接运算符是 left 和 right,而驱动程序实际上不'不支持交叉连接运算符(失败并显示语法不正确的消息)。

我从this 链接收集到,使用变通办法并不能保证得到正确答案。

我也想过尝试一个较低的级别,例如使用带有 ODBC API 的 Pinvoke,例如 SqlGetInfoSqlGetFunctions,但这似乎是一个死胡同。

任何帮助将不胜感激!

【问题讨论】:

标签: c# sql join odbc pinvoke


【解决方案1】:

如果我做对了,那么使用 ODBC API,您应该能够使用属性SQL_SQL92_RELATIONAL_JOIN_OPERATORS 进行查询,测试SQL_SRJO_CROSS_JOIN。 来自https://msdn.microsoft.com/en-us/library/ms711681%28v=vs.85%29.aspx的描述:

SQL_SQL92_RELATIONAL_JOIN_OPERATORS(ODBC 3.0)

一个 SQLUINTEGER 位掩码,用于枚举 SELECT 语句中支持的关系连接运算符,如 SQL-92 中所定义。

必须支持此功能的 SQL-92 或 FIPS 一致性级别显示在每个位掩码旁边的括号中。

以下位掩码用于确定数据源支持哪些选项:

SQL_SRJO_CORRESPONDING_CLAUSE(中级)SQL_SRJO_CROSS_JOIN(完整级)SQL_SRJO_EXCEPT_JOIN (中级)SQL_SRJO_FULL_OUTER_JOIN(中级) SQL_SRJO_INNER_JOIN(FIPS 过渡级别)SQL_SRJO_INTERSECT_JOIN (中级)SQL_SRJO_LEFT_OUTER_JOIN(FIPS 过渡 级别)SQL_SRJO_NATURAL_JOIN(FIPS 过渡 级别)SQL_SRJO_RIGHT_OUTER_JOIN(FIPS 过渡 级别)SQL_SRJO_UNION_JOIN(完整级别)

SQL_SRJO_INNER_JOIN 表示支持 INNER JOIN 语法,而不是支持内连接功能。支持 INNER JOIN 语法 是 FIPS TRANSITIONAL,而对内部连接功能的支持是 进入。

【讨论】:

  • 嗨@erg,谢谢你的回答。实际上,隐藏在您的答案中的是让我忽略的更简单的解决方案:SQL 级别写在每个连接旁边的括号中:Entry, Intermediate, FIPS Transitional and Full。由此判断,交叉连接属于完整的sql级别(我通过阅读此pdf验证了它:databaser.net/moniwiki/pds/DatabaseSystem/SQL99.pdf。由于我已经使用SqlDrivers获得了此参数,因此我从干预SqlGetInfo中解脱了,我的问题解决了!无论如何,你的答案是正确的:-)
  • 是的,这是有道理的。下次我会尽量记住这一点:)
猜你喜欢
  • 2017-06-24
  • 2019-03-19
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多