我想使用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)
结果
dbSendRes
是:
<OdbcResult>
SQL INSERT INTO [dbName].[dbSchema].[TestTableName] (MyValue ) VALUES ('test'); SELECT SCOPE_IDENTITY() as newID;;
ROWS Fetched: 0 [complete]
Changed: 1
因此,insert语句在服务器上成功执行,但是我没有得到新分配的ID。内容
dbFetch
是一个空数据。框架我也试过使用
dbSendStatement
和
dbExecute
没有任何进展。我还尝试挖掘其他参数,比如
immediate=TRUE
没有任何成功。我还尝试切换回旧的RODBC包,并使用其中的方法。什么都不管用。
我错过什么了吗?
问题仍然是,我必须以某种方式跟踪分配给db条目的新ID!没有身份证我无法继续。我可以在另一个单独的语句完成insert后做一个变通方法并查询max ID,但是如果同时另一个语句插入另一个条目,这当然可能会导致其他更基本的问题。。。
很高兴有任何建议!
最好的