繁体   English   中英

读取最后插入的ID

[英]Read Id of last inserted

我已经经历了几周的时间,直到找到在数据库级别上起作用的语句。 下面是我的代码,我觉得我已经很接近答案了,但是从SCOPE_IDENTITY()返回-1 Customer_Name与自动增量一起很好地保存到了表中。 我只需要Customer_ID以便可以将其放置在Customer_Address表中,以便一对一标识客户的地址。

在此先感谢您的帮助。

if (customer_ID == "")
{
    // add new customer
    string SQL = "INSERT INTO Customer (Customer_Name) VALUES (@customer_Name)";
    SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection);
    sqlCommand.Parameters.Add("@customer_Name", SqlDbType.VarChar, 100).Value = customer_Name;

    // get last inserted Customer_ID
    string SQL_customerId = "SELECT SCOPE_IDENTITY()";
    SqlCommand sqlCommand_customerId = new SqlCommand(SQL_customerId, sqlConnection);

    sqlConnection.Open();
    sqlCommand.ExecuteNonQuery();
    sqlCommand_customerId.ExecuteNonQuery();

    // string SQL_ = "SELECT Customer_ID FROM Customer";
    // SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection);
    // int maxId = Convert.ToInt32(sqlCommand.ExecuteScalar());
    sqlConnection.Close();
}

您需要在插入内容的同一笔交易中包含SCOPE_IDENTITY。 以下内容将为您提供帮助。

string SQL = "INSERT INTO Customer (Customer_Name) VALUES (@customer_Name); SELECT Customer_Id FROM Customer WHERE Customer_Id = SCOPE_IDENTITY();";
SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection);
sqlCommand.Parameters.Add("@customer_Name", SqlDbType.VarChar, 100).Value = customer_Name;
sqlConnection.Open();
int id = (int) sqlCommand.ExecuteScalar();

尝试使用类似的方法。Output子句将帮助您获取插入的值,并可以将其插入到另一个临时表或物理表中。 这只是您的问题的一个主意

CREATE TABLE customer
  (
     id     INT IDENTITY(1, 1),
     addres VARCHAR(500)
  )

CREATE TABLE customeraddrs
  (
     custid INT
  )

INSERT INTO customer
output      inserted.id
INTO customeraddrs
VALUES     ('a'),
            ('b')

SELECT *
FROM   customer

SELECT *
FROM   customeraddrs 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM