有没有办法选择插入的行?我正在尝试使用SqlCommand运行以下查询(用于在数据库中保留给定的ID):

INSERT INTO tbl (id)
SELECT COUNT(*) + 1 AS id from tbl


有没有一种方法可以返回插入的id列,以便我可以在我的应用中使用它?也许有更简单的方法可以实现这一目标?我必须绝对确保保留免费ID,即使有多个用户同时使用该应用也是如此。

另外,有没有一种方法可以更改查询以选择第一个免费ID,从而避免出现空白?

最佳答案

您可以轻松地使用OUTPUT子句输出例如新创建的ID作为结果集,您可以使用标准的SqlDataReader从C#应用中读取这些ID:

INSERT INTO tbl (id)
OUTPUT Inserted.Id
   SELECT COUNT(*) + 1 AS id from tbl


更新:可以从C#端捕获OUTPUT子句返回的数据,就好像它是常规的SELECT语句一样:

string insertStmt = "INSERT INTO tbl (id) " +
                    " OUTPUT Inserted.Id " +
                    " SELECT COUNT(*) + 1 AS id from tbl";

using (SqlConnection conn = new SqlConnection(-your-connection-string-here-))
using (SqlCommand cmd = new SqlCommand(insertStmt, conn))
{
    conn.Open();

    // execute your INSERT statement into a SqlDataReader
    using(SqlDataReader reader = cmd.ExecuteReader())
    {
        // read the values returned from the OUTPUT clause
        while(reader.Read())
        {
            int insertedID = reader.GetInt32(0);
            // do something with those values....
        }
    }

    conn.Close();
}

10-07 12:05
查看更多