问题描述
我有一个R脚本,该脚本在SQL Server中调用存储过程。 MS SQL Server中的存储过程将记录从一个表插入到具有自动增量ID列(IDENTITY(1,1)
)的另一个表中。当存储过程执行时,将一个表中的行插入到另一个表中后,将返回自动递增的ID(id
)和插入的值(file_name
)。当我在SQL Server Management Studio中运行过程时,每个过程均按预期执行,并返回带有id
和file_name
的表。但是,当我使用DBI
包在R中执行存储过程调用时,出现以下错误:
Error in result_fetch(res@ptr,n) :
nanodbc/nanodbc.cpp:2695: 24000: [Microsoft][ODBC SQL Server Driver]Invalid cursor state Warning message:
In dbClearResult(rs) : Result already cleared
有人知道如何解决此问题吗?我浏览了SO上的其他数十篇文章,似乎没有一个可以为我解决这个问题。
作为背景,这是我的两个表和一个存储的proc的玩具示例,以及我在R Studio中的调用,这些示例演示了可重复性的问题。我还将R Studio 1.3.1073和R-4.0.2一起使用:
CREATE TABLE [dbo].[etl_log](
[id] [int] IDENTITY(1,1) NOT NULL,[file_name] [nvarchar](300) NULL,[file_description] [nvarchar](300) NULL,PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[etl_log_temp](
[File Name] [varchar](255) NULL,[File Description] [varchar](255) NULL) on [PRIMARY]
GO
CREATE PROCEDURE [dbo].[insert_files_to_etl_log]
AS
INSERT INTO [dbo].[etl_log]
([file_name],[file_description])
OUTPUT inserted.id,inserted.file_name
SELECT
[File Name],[File Description]
FROM [dbo].[etl_log_temp]
GO
在R Studio中,我打电话给
files_succesfully_downloaded <- DBI::dbGetQuery(con,"exec [dbo].[insert_files_to_etl_log]")
我对files_succesfully_downloaded
的预期输出应该是一个看起来像这样的数据框:
id file_name
1 filex
2 filey
3 filez
相反,我得到了上面提到的错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)