result_fetchres @ ptr,n中的错误:nanodbc / nanodbc.cpp:2695:24000:[Microsoft] [ODBC SQL Server驱动程序]无效的游标状态

问题描述

我有一个R脚本,该脚本在SQL Server中调用存储过程。 MS SQL Server中的存储过程将记录从一个表插入到具有自动增量ID列(IDENTITY(1,1))的另一个表中。当存储过程执行时,将一个表中的行插入到另一个表中后,将返回自动递增的ID(id)和插入的值(file_name)。当我在SQL Server Management Studio中运行过程时,每个过程均按预期执行,并返回带有idfile_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 (将#修改为@)