有没有办法选择插入的行?我正在尝试使用SqlCommand
运行以下查询(它用于在数据库中保留给定的id):
INSERT INTO tbl (id)
SELECT COUNT(*) + 1 AS id from tbl
有没有办法返回插入的id列,以便我可以在我的应用程序中使用它?或者也许有一种更简单的方法可以实现这一目标?我必须绝对确定我保留了免费ID,即使多个用户同时使用该应用程序。
另外,有没有办法可以更改查询以选择第一个免费ID,以便我可以避免差距?
答案 0 :(得分:10)
您可以轻松使用OUTPUT
子句输出例如新创建的ID作为结果集,您可以使用标准SqlDataReader
从C#应用中读取这些ID:
INSERT INTO tbl (id)
OUTPUT Inserted.Id
SELECT COUNT(*) + 1 AS id from tbl
更新: OUTPUT
子句返回的数据可以从C#端捕获,就像它是常规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();
}
答案 1 :(得分:0)
如果id
是一个标识列,您可以使用SCOPE_IDENTITY()
或MAX(id)
来获取最新的记录ID,但这不会解决任何问题。您可以在获得该记录时插入另一条记录。此外,如果您想要获取插入的行,一种方法是通过Triggers
或inserted
关键字。但是尝试保留id是没用的,因为标识列每次都返回一个唯一的id。