给定一个ODBC连接字符串,我正在尝试确定此连接是否支持交叉连接。
目前我使用以下代码来确定支持的连接操作符:
(SupportedJoinOperators)connection.GetSchema("DataSourceInformation").Rows[0]["SupportedJoinOperators"]
但是这只给了我内连接,左连接,右连接和全连接。
例如,如果连接字符串使用microsoft文本驱动程序(.txt .csv),则支持的连接操作符为左和右,并且驱动程序实际上不支持交叉连接操作符(失败并提示语法错误)。
使用变通方法并不能保证正确的答案,正如我从这个链接中收集到的。
我还想尝试一个较低的级别,如使用Pinvoke与ODBC API,如SqlGetInfo
或SqlGetFunctions
,但它似乎是一个死胡同。
任何帮助将非常感激!
如果我做对了,那么使用ODBC API,您应该能够使用属性SQL_SQL92_RELATIONAL_JOIN_OPERATORS
查询,测试SQL_SRJO_CROSS_JOIN
。来自https://msdn.microsoft.com/en-us/library/ms711681%28v=vs.85%29.aspx:
3.0SQL_SQL92_RELATIONAL_JOIN_OPERATORS (ODBC)
一个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_JOINSQL_SRJO_NATURAL_JOIN (FIPS过渡SQL_SRJO_RIGHT_OUTER_JOIN (FIPS过渡SQL_SRJO_UNION_JOIN (Full level)
SQL_SRJO_INNER_JOIN表示支持INNER JOIN语法,而不支持内部连接功能。支持INNER JOIN语法FIPS是过渡性的,而对内连接功能的支持是条目。