在一个语句中插入并选择

时间:2012-08-01 12:33:14

标签: c# sql-server-2008 tsql select

  

可能重复:
  How to get last inserted id?

我有一张表Absences

|  Id  |  Name  |  Job  |
-------------------------
|  1   |  James |   1   |
-------------------------
|  2   |  Simon |   1   |
-------------------------

其中ID是以{1}递增的标识Primary Key 我正在从C#中的程序访问此表,我需要执行以下操作:

Insert Into Absences (Name, Job) Values ('aName', 'aJob')

问题是,我需要同时插入Id列,因为NameJob不是唯一的,所以我无法进行检索这个确切的专栏之后。

是否可以在该查询的Id列中添加选择?


更新

  SqlConnection myConnection = new SqlConnection(@"SomeConnection");
  myConnection.Open();
  SqlCommand myCommand = myConnection.CreateCommand();
  myCommand.CommandText = "Insert Into Absences (Name, Job) Values ('aName', 'aJob')";
  int currentAbs = (int)myCommand.ExecuteScalar();

我在ExecuteScalar Line上出错了。对象引用未设置为对象的实例。

4 个答案:

答案 0 :(得分:2)

SQL语句SCOPE_IDENTITY()将为您提供同一范围内新插入行的标识列的值。

SqlConnection myConnection = new SqlConnection(@"SomeConnection");
myConnection.Open();
SqlCommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = "Insert Into Absences (Name, Job) Values ('aName', 'aJob'); SELECT SCOPE_IDENTITY();";
int currentAbs = (int)myCommand.ExecuteScalar();

Scope Identity Definition

答案 1 :(得分:1)

如果您使用SqlCommand,则可以使用

int lastId = (int)command.ExecuteScalar();

检索插入记录的唯一ID 看看Microsoft page

答案 2 :(得分:0)

在此查询之后,您可以选择 @@ identity 以获取mssql server中最后插入的ID。

答案 3 :(得分:0)

一种方法是在插入记录后立即使用SELECT @@IDENTITY

int id;
string query = "Insert Into Absences (Name, Job) Values ('aName', 'aJob')";
using (SqlCommand cmd = new SqlCommand(query, connection)) {
    connection.Open();
    // execute your INSERT query
    cmd.ExecuteNonQuery();
    // get the last-inserted ID
    cmd.CommandText = "SELECT @@IDENTITY";
    id = (int)cmd.ExecuteScalar();
}