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 之外使用像sqlcmd
或 SSMS
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" <> mystoredproc <> MYSTOREDPROC
)。
不存在对象在数据库或架构中,通过删除或转移到不同的数据库或架构。
【讨论】:
以上是关于R SQL查询:找不到存储过程的主要内容,如果未能解决你的问题,请参考以下文章
使用 ssis 包在 SQL Server 代理作业中找不到存储过程错误