首页 > 解决方案 > 插入后如何获取标识列的值?

问题描述

我正在尝试使用 R 的RODBC库插入到tblSQL SERVER 2012 中具有标识列的表中。我按如下方式插入:

INSERT INTO tbl(col1, col2, col3)
VALUES (1, 2, 3)

然后我想获取标识列的值。我知道我需要做,SELECT SCOPE_IDENTITY()但我不知道如何做。这是我尝试过的:

library(RODBC)
query.str <- "
              INSERT INTO tbl(col1, col2, col3)
              VALUES (1, 2, 3);
              SELECT SCOPE_IDENTITY();
             "
some.return <- sqlQuery(dbcon, query.str)

some.return没有任何价值。我希望输出SCOPE_IDENTITY()会在那里......关于如何获得身份价值的任何想法?

标签: rsql-serversql-server-2012rodbc

解决方案


我能够让它以一种有点肮脏的方式工作。我不确定这是否是这样做的唯一方法 - 我不喜欢向 sql server 发出 2 条语句,因为这在并行环境中可能会有风险......但作为一种解决方案,这似乎确实有效:

library(RODBC)

#semicolon at the end of the sql seems significant
query.str <- "
              INSERT INTO tbl(col1, col2, col3)
              VALUES (1, 2, 3);
             "
output <- sqlQuery(dbcon, query.str)
if (is.character(output) && length(output) > 0)
  stop(paste("SQL ERROR: ", output))

reg.id <- sqlQuery(dbcon, "SELECT SCOPE_IDENTITY()")
if (is.character(reg.id) && length(reg.id) > 0)
  stop(paste("SQL ERROR: ", reg.id))

reg.id[[1]]

推荐阅读