【问题标题】:Identical SQL query works on some tables but errors out on other tables same in the same DB相同的 SQL 查询适用于某些表,但在同一数据库中相同的其他表上出错
【发布时间】:2021-04-24 07:38:46
【问题描述】:

我是一名财务人员(很少有编程背景),所以我可能会向数据库编程专家提出一些显而易见的问题,但我会很感激任何建议

背景:

我正在通过 Microsoft SQL Management Studio 中的 ODBC 访问 Oracle NetSuite 数据库

作为链接服务器的连接已成功建立

我正在尝试执行以下 SQL 语句:

select * from [NETSUITE_SB2].[SB-B].[Administrator].[VARIANCE] -- success 

select * from [NETSUITE_SB2].[SB-B].[Administrator].[WTAX_JOB] -- "Msg 7314, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "NETSUITE_SB2" does not contain the table ""SB-B"."Administrator"."WTAX_JOB"". The table either does not exist or the current user does not have permissions on that table."

经过一些测试,查询是否成功运行似乎取决于表名是否包含“_”(下划线) - 对于所有没有下划线的表,我尝试过,对于所有带下划线的表,我都试过了试过了,失败了。

谁能帮我弄清楚如何克服这个问题?

提前致谢!

【问题讨论】:

  • 建议:熟悉编辑器中可用的代码格式选项——那是无法阅读的。

标签: sql sql-server oracle odbc netsuite


【解决方案1】:

不要在 SQL Server 中使用 4 部分名称并让 SQL Server 为链接服务器生成查询,而是尝试使用 OPENQUERY 函数并直接以目标系统的 SQL 方言传递查询。比如:

select * 
from OPENQUERY([NETSUITE_SB2], 'select * from [SB-B].[Administrator].[WTAX_JOB]' ) 

【讨论】:

  • 这不是错误吗? IE。链接服务器查询应生成有效查询
  • 绝对不是错误。 OP 正在使用 MSDASQL,它是 ODBC 的 OleDb 提供程序。当您这样做时,SQL Server完全不知道什么是 ODBC 数据源或它支持什么类型的查询。它所能做的最好的事情就是猜测。
【解决方案2】:

我刚刚在我刚刚设置的一个新实例中遇到了这个问题。我已经使用 Suite Connect 4 年多了,之前没有遇到过这个问题。

我认为这里的问题在于名称的“[SB-B]”部分,因为它包含“-”破折号。我发现一个“,逗号或”。期间是我的名字 [Acme, Inc.] 的问题。 Ether 句点或逗号引发错误。

4 部分名称的第二部分是常规设置公司信息下的 NetSuite [公司名称]。我在 NetSuite 中更改了名称并删除了逗号和句点,问题就消失了。也许大多数特殊字符会导致问题?

请记住,您必须在之前创建的每个查询中更新您的第二部分名称。

虽然使用 OPENQUERY 是一种解决方案,但我只是不喜欢所需的额外引号,因此我更喜欢普通 SQL。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2014-07-06
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多