R SQL查询:找不到存储过程

Posted

技术标签:

【中文标题】R SQL查询:找不到存储过程【英文标题】:R SQL query: Could not find stored procedure 【发布时间】:2020-12-31 19:43:31 【问题描述】:

我正在使用 R 运行存储 SQL 过程:

    query.str = "EXEC [StoredProcedure].[Procedure1]"
    con <- odbcConnect("my_database")
    my_data  = sqlQuery(con, query.str)

此代码在我的笔记本电脑上运行良好。但是当我尝试在服务器上运行它时,它给出了一个错误:

42000 2812 [Microsoft][ODBC SQL Server Driver][SQL Server]Could not find stored procedure

我不认为这是存储过程本身的问题,因为我遇到了多个存储过程的相同情况(它们在我的笔记本电脑上工作,但在服务器上不工作)。

编辑:我确定连接字符串有效。当我对非存储过程使用相同的连接字符串时,它可以正常工作并且数据读取得很好。该问题仅发生在存储过程中。

提前谢谢你!

【问题讨论】:

检查数据库所在位置的连接字符串。如果它在本地工作,您可能有数据库的本地副本,但 SP 不在服务器上?或者当您在笔记本电脑以外执行它时,无法看到(或没有权限)从应用程序执行 SP 的 DB。 我确信连接正常,除了存储过程之外,一切都运行良好。 你说的服务器是什么意思?您的意思是在 R 之外使用像 sqlcmdSSMS IDE 这样的 SQL Server 接口吗?正如您的代码所假设的那样,存储过程是否存在于特定数据库的 dbo 架构下?请运行information schema query 来定位数据库和模式名称下的存储过程。 【参考方案1】:

找到的解决方案:通过 Window Odbc 连接器,将默认数据库更改为所需的数据库修复了问题。

【讨论】:

【参考方案2】:

由于三个主要问题,可能会引发此错误:

不正确的引用对象的封装,包括架构或数据库。

每个 SQL Server 对象(表、存储过程、函数等)都驻留在架构中,每个架构都驻留在数据库中。此外,每个对象都可以由多部分名称引用。 SQL Server 中的默认架构是dbo。因此,通过在对象引用中不指定数据库和模式,假定对象驻留在连接数据库和dbo 模式中。因此,以下调用是等价的:

EXEC [myServer].[myConnectedDatabase].[dbo].[myStoredProcedure]
EXEC [myConnectedDatabase].[dbo].[myStoredProcedure]
EXEC [dbo].[myStoredProcedure]
EXEC [myStoredProcedure]

如果myStoredProcedure 不驻留在指定的数据库或架构中,则会引发此错误。如果您不知道或不记得存储过程所在的位置,请对系统 sys 视图、INFORMATION_SCHEMA 视图或系统存储过程 sp_* 运行查询。

存储过程的

拼写错误,包括未转义特殊字符或reserved words。

要转义空格、特殊字符(非字母数字和非下划线)和保留字,请将对象名称括在方括号 [...] 中。最好避免使用此类名称。谢天谢地,默认情况下 SQL Server 对标识符不区分大小写。在其他 RDBMS 中,如 Oracle 和 Postgres,在 CREATE TABLE 阶段为混合大小写保留大小写敏感性,混合大小写类型需要双引号(即 "myStoredProc" &lt;&gt; mystoredproc &lt;&gt; MYSTOREDPROC)。

不存在对象在数据库或架构中,通过删除或转移到不同的数据库或架构。

【讨论】:

以上是关于R SQL查询:找不到存储过程的主要内容,如果未能解决你的问题,请参考以下文章

在安装SAP B1时候出现找不到存储过程的问题

MS SQL 和 Java:在调用存储过程期间找不到表变量

使用 ssis 包在 SQL Server 代理作业中找不到存储过程错误

在 Azure SQL Server 上安装和配置 Polybase - 找不到存储过程“sp_configure”

为啥 PDI 找不到/运行我的包存储过程?

Dapper 或 MySql 找不到包含句号“。”的存储过程。