我正在尝试在SQL Server中使用SEQUENCE对象,并通过指定序列名称使用C#获取下一个值。范围很简单,因为有一个存储过程可以用于它们,您可以传递序列名称;
public static T Reserve<T>(string name, int count, SqlConnection sqlConn)
{
using (var sqlCmd = new SqlCommand("sp_sequence_get_range", sqlConn))
{
sqlCmd.CommandType = CommandType.StoredProcedure;
var firstValueParam = new SqlParameter("@range_first_value", SqlDbType.Variant) { Direction = ParameterDirection.Output };
sqlCmd.Parameters.AddWithValue("@sequence_name", name);
sqlCmd.Parameters.AddWithValue("@range_size", count);
sqlCmd.Parameters.Add(firstValueParam);
sqlCmd.ExecuteNonQuery();
return (T)firstValueParam.Value;
}
}
但是单个值怎么办?在我看来,我可以使用计数为“1”来调用上述函数,或者我可以动态构建SQL。例如:
var sqlCmdStr = string.Format("SELECT NEXT VALUE FOR {0}", name);
我知道这通常是一种不好的做法(即SQL注入)。有什么建议吗?