有没有办法选择插入的行?我正在尝试使用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();
}