.NET中SQLServer使用set @ReturnValue= @@IDENTITY的Oracle写法

最近还是在做这个项目,在上一篇文章中提到了。SQLServer的select @@identity在Oracle中的写法但是不知道为什么我在执行的时候出现了错误。显示字符错了,四处查找资料。翻看Oracle的文档,最后找到了一个完美替换的写法。在SQLServer中使用是这样的

StringBuilder strSql=new StringBuilder();
strSql.Append("insert into t_orders(order_num,user_num)");
strSql.Append(" values (");
strSql.Append("@order_num,@user_num)");
strSql.Append(";set @ReturnValue= @@IDENTITY");
SqlParameter[] parameters = {
		new SqlParameter("@order_num", SqlDbType.NVarChar,100),
		new SqlParameter("@user_num", SqlDbType.Int,4),
		new SqlParameter("@ReturnValue",SqlDbType.Int)};
parameters[0].Value = model.order_no;
parameters[1].Value = model.user_id;
parameters[3].Direction = ParameterDirection.Output;

以上这个方法就可以在运行之后使用parameters[3].Value取出刚刚插入的数据自增ID。但是在Oracle中,是本身没有自增ID的,所以我采用触发器与序列来实现自增列。但是Oracle是不支持set @ReturnValue= @@IDENTITY这种方式的。那么在Oracle中就必需这样

StringBuilder strSql=new StringBuilder();
strSql.Append("insert into t_orders(order_num,user_num)");
strSql.Append(" values (");
strSql.Append(":order_num,:user_num)");
strSql.Append(" returning id into :ReturnValue");
SqlParameter[] parameters = {
		new SqlParameter(":order_num", SqlDbType.NVarChar,100),
		new SqlParameter(":user_num", SqlDbType.Int,4),
		new SqlParameter(":ReturnValue",SqlDbType.Int)};
parameters[0].Value = model.order_no;
parameters[1].Value = model.user_id;
parameters[3].Direction = ParameterDirection.Output;

使用以上方法就可以实现SQLServer中的set @ReturnValue= @@IDENTITY功能了。

原创文章,作者:锋哥,如若转载,请注明出处:https://www.fangsi.net/767.html

发表评论

登录后才能评论