我正在 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。IE
var sqlCmdStr = string.Format("SELECT NEXT VALUE FOR {0}", name);
我知道这通常是不好的做法(即 SQL 注入)。
有人会建议什么?