如何确定 ODBC 支持的连接运算符 - 交叉连接
How to determine ODBC supported join operators - Cross Join
给定一个 ODBC 连接字符串,我试图确定此连接是否支持交叉连接。
目前我使用以下代码来确定支持的连接运算符:
(SupportedJoinOperators)connection.GetSchema("DataSourceInformation").Rows[0]["SupportedJoinOperators"]
但这只给我内部、左、右和完全连接。
例如,如果连接字符串使用 microsoft 文本驱动程序 (.txt .csv),则保留受支持的连接运算符是的,驱动程序实际上不支持交叉连接运算符(失败并显示语法错误消息)。
使用变通办法并不能保证得到正确的答案,正如我从 this link.
中收集到的
我也想过尝试更低的级别,比如将 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 的描述:
SQL_SQL92_RELATIONAL_JOIN_OPERATORS(ODBC 3.0)
An SQLUINTEGER bitmask enumerating the relational join operators supported in a SELECT statement, as defined in SQL-92.
The SQL-92 or FIPS conformance level at which this feature must be supported is shown in parentheses next to each bitmask.
The following bitmasks are used to determine which options are supported by the data source:
SQL_SRJO_CORRESPONDING_CLAUSE (Intermediate level)SQL_SRJO_CROSS_JOIN (Full level)SQL_SRJO_EXCEPT_JOIN
(Intermediate level)SQL_SRJO_FULL_OUTER_JOIN (Intermediate level)
SQL_SRJO_INNER_JOIN (FIPS Transitional level)SQL_SRJO_INTERSECT_JOIN
(Intermediate level)SQL_SRJO_LEFT_OUTER_JOIN (FIPS Transitional
level)SQL_SRJO_NATURAL_JOIN (FIPS Transitional
level)SQL_SRJO_RIGHT_OUTER_JOIN (FIPS Transitional
level)SQL_SRJO_UNION_JOIN (Full level)
SQL_SRJO_INNER_JOIN indicates support for the INNER JOIN syntax, not for the inner join capability. Support for the INNER JOIN syntax
is FIPS TRANSITIONAL, whereas support for the inner join capability is
ENTRY.
给定一个 ODBC 连接字符串,我试图确定此连接是否支持交叉连接。
目前我使用以下代码来确定支持的连接运算符:
(SupportedJoinOperators)connection.GetSchema("DataSourceInformation").Rows[0]["SupportedJoinOperators"]
但这只给我内部、左、右和完全连接。
例如,如果连接字符串使用 microsoft 文本驱动程序 (.txt .csv),则保留受支持的连接运算符是的,驱动程序实际上不支持交叉连接运算符(失败并显示语法错误消息)。
使用变通办法并不能保证得到正确的答案,正如我从 this link.
中收集到的我也想过尝试更低的级别,比如将 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 的描述:
SQL_SQL92_RELATIONAL_JOIN_OPERATORS(ODBC 3.0)
An SQLUINTEGER bitmask enumerating the relational join operators supported in a SELECT statement, as defined in SQL-92.
The SQL-92 or FIPS conformance level at which this feature must be supported is shown in parentheses next to each bitmask.
The following bitmasks are used to determine which options are supported by the data source:
SQL_SRJO_CORRESPONDING_CLAUSE (Intermediate level)SQL_SRJO_CROSS_JOIN (Full level)SQL_SRJO_EXCEPT_JOIN (Intermediate level)SQL_SRJO_FULL_OUTER_JOIN (Intermediate level) SQL_SRJO_INNER_JOIN (FIPS Transitional level)SQL_SRJO_INTERSECT_JOIN (Intermediate level)SQL_SRJO_LEFT_OUTER_JOIN (FIPS Transitional level)SQL_SRJO_NATURAL_JOIN (FIPS Transitional level)SQL_SRJO_RIGHT_OUTER_JOIN (FIPS Transitional level)SQL_SRJO_UNION_JOIN (Full level)
SQL_SRJO_INNER_JOIN indicates support for the INNER JOIN syntax, not for the inner join capability. Support for the INNER JOIN syntax is FIPS TRANSITIONAL, whereas support for the inner join capability is ENTRY.