【问题标题】:MS SQL Invalid Object NameMS SQL 无效的对象名称
【发布时间】:2014-03-17 17:01:54
【问题描述】:

我有

cursor.execute("select RM_ID FROM Sales.dbo.MARKETING where VERSION = 'SomeVersion'")

这给了我回溯错误:

pyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Sales.dbo.MARKETING'. (208) (SQLExecDirectW)")

我还有几行代码:

cursor.execute("select RUNDATEEST FROM Sales.dbo.MARKETING where VERSION = 'SomeVersion'")

除了给我没有错误的列名之外,它们完全相同。我不确定我的错误是什么。

注意:

  • 我已经检查了表中的列名以确保它存在。
  • 我注意到此列是该表的键。也许键需要不同的语法?
  • 当我在 SQL Server 中执行查询时,它运行良好。

【问题讨论】:

  • 我不是 python 开发人员...您能调试失败的 cursor.execute 语句并检查 sql 连接字符串/属性吗?也许它没有连接正确的数据库。
  • 他们使用包含数据库名称的三部分名称,因此数据库上下文无关紧要。但是,如果用户不同,他们可能没有适当的权限。
  • @DMason 我最近被授权访问 SQL Server 上的这个数据库,所以这不太可能。字符串为:cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=ARACHNSQL1;DATABASE=SALES;Trusted_Connection=yes')
  • @JNK 我将与数据库管理员核实。
  • 好的,看来连接字符串是在运行时设置的。我看到Trusted_Connection-yes。这意味着您的应用程序正在尝试使用应用程序的 Windows 凭据连接到 MSSQL。该应用程序是否在您的凭据下运行? (它可能在另一个用户下运行。模拟可能在起作用......)

标签: python sql-server pyodbc


【解决方案1】:

尝试用括号括起来架构和表名:

[Sales].[dbo].[MARKETING]

也许您需要以相同的方式将列名括起来。

【讨论】:

  • 添加方括号为我解决了这个错误。我使用 C# 中的 ODBC 通过单个 ODBC 连接对同一服务器上的两个不同数据库运行 SQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2018-08-08
相关资源
最近更新 更多