' master..sysdatabases中'此版本的SQL Server

时间:2018-01-23 17:29:11

标签: sql-server azure-sql-database pypyodbc

我正在尝试将我的烧瓶应用程序与Azure数据库连接,这是我遇到此错误的时候。我无法找到任何内容,任何帮助都会受到赞赏。

pypyodbc.connect(
    Driver={SQL Server};Server=tcp:******.net,1433;Database=***;UID=***;PWD=***;
)

1 个答案:

答案 0 :(得分:1)

问题是由您的

组合引起的
  1. pypyodbc
  2. 古老的ODBC驱动程序名为“SQL Server”,和
  3. Azure SQL
  4. 当pypyodbc尝试通过pypyodbc.connect建立连接时,其中的一个(很多!)事情是尝试确定您是否具有对数据库的只读或读写访问权限。它使用的ODBC调用由“SQL Server”ODBC驱动程序翻译为

    select substring('NY',status/1024&1+1,1) from master..sysdatabases where name=DB_NAME()
    

    Azure SQL显然不喜欢。

    相比之下,更现代的ODBC驱动程序,如“用于SQL Server的ODBC驱动程序11”,将相同的ODBC调用转换为

    SELECT CASE DATABASEPROPERTYEX( DB_NAME(), 'Updateability') WHEN 'READ_ONLY' THEN 'Y' ELSE 'N' END
    

    这可能更适合Azure SQL。

    因此,您可以切换到较新的ODBC驱动程序,也可以尝试使用pyodbc而不是pypyodbc,因为pyodbc在连接时似乎不会查询数据库的RO / RW状态。