R odbc在插入后不返回作用域\ U标识
我想使用R和odbc包在数据库中插入一个新行 设置如下所示: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) ) 就我所理解的问题而言,表是如何创建的并不重要 现
- 我使用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');