R odbc在插入后不返回作用域\ U标识

R odbc在插入后不返回作用域\ U标识,r,sql-server,odbc,R,Sql Server,Odbc,我想使用R和odbc包在数据库中插入一个新行 设置如下所示: 我使用SQL Server托管数据库 我已经在我的机器上安装了ODBC驱动程序,以便连接到数据库 我创建了一个新表 CREATE TABLE [dbName].[dbSchema].[TestTableName] ( MyID INT IDENTITY(1,1), MyValue VARCHAR(255), PRIMARY KEY (MyID) ) 就我所理解的问题而言,表是如何创建的并不重要 现

我想使用R和odbc包在数据库中插入一个新行

设置如下所示:

  • 我使用SQL Server托管数据库
  • 我已经在我的机器上安装了ODBC驱动程序,以便连接到数据库
我创建了一个新表

CREATE TABLE [dbName].[dbSchema].[TestTableName] 
(
    MyID INT IDENTITY(1,1), 
    MyValue VARCHAR(255), 
    PRIMARY KEY (MyID) 
)
就我所理解的问题而言,表是如何创建的并不重要

现在,我想在这个表中插入一个新条目,并保留MyID的新的自动递增值。为此,我可以运行以下SQL语句:

INSERT INTO [dbName].[dbSchema].[TestTableName] (MyValue)
VALUES ('test'); 

SELECT SCOPE_IDENTITY() as newID;
当我在SQLServerManagementStudio中运行此语句时,它会愉快地返回一个包含新ID的1x1表

现在我的问题开始了:当我尝试在R中使用以下命令执行相同的表单时:

con <- odbc::dbConnect(
          odbc::odbc(),
          dsn = ...,
          database = "dbName",
          UID = ...,
          PWD = ...
        ) # the connection is tested and works
createQuery <- "INSERT INTO [dbName].[dbSchema].[TestTableName] (MyValue ) VALUES ('test'); SELECT SCOPE_IDENTITY() as newID;"
dbSendRes <- odbc::dbSendQuery(conn = con, statement = createQuery)
因此,insert语句在服务器上成功执行,但结果我没有得到新分配的ID。
dbFetch
的内容是空的data.frame。我还尝试使用
dbSendStatement
dbExecute
,但没有任何进展。我还尝试挖掘其他参数,如
immediate=TRUE
,但没有成功。我还尝试切换回旧的RODBC包,并使用其中的方法。什么都不管用

我错过什么了吗

问题仍然是,我必须以某种方式跟踪分配给db条目的新ID!没有那个身份证我不能继续。我可以在另一个单独的语句完成insert后做一个变通方法并查询max ID,但是如果同时另一个语句插入另一个条目,这当然可能会导致其他更基本的问题

很高兴有任何建议!
最好的

基于零知识的R。。。要让
INSERT
返回新创建的id,可以在
INSERT
语句中添加
OUTPUT
子句。看来这是可行的。 像这样的

INSERT INTO [dbName].[dbSchema].[TestTableName] (MyValue ) 
output inserted.MyID
VALUES 
('test');
INSERT INTO [dbName].[dbSchema].[TestTableName] (MyValue ) 
output inserted.MyID
VALUES 
('test');