转载:关于 存储过程返回值

有一个表,其主键是int并且为自动增长的。当我向这个表中插入一项并且不提供主键的时候,数据库会自动添加一个唯一的主键。
问题是:
怎么得到刚刚插入的那一项的主键值?
1、
存储过程有两种方式返回值:
第一:通过output 参数
第二:通过return来实现
而在你的存储过程已经声明了一个output参数,只要你在你的存储过程已经给这个值赋值了,它就能返回回去.
建议一般用output参数,因为它可以返回多个,而return只能是一个,return一般用来返回:影响的行数,错误编码等
2、
为避免多用户操作数据库取值不正确
正确应该要这样取:
SELECT * FROM table WHERE (AutoIncreaseColumn = SCOPE_IDENTITY())
3、
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。
IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
IDENT_CURRENT()   始终返回指定表最后插入的标识值
@@IDENTITY        返回当前会话的标识值,无论是否在同一个作用域,在测试1、2中,可以看到它返回的是触发器中插入记录的标识值,而在测试3中,因为当前会话无插入记录,所以返回NULL
SCOPE_IDENTITY() 返回当前会话同一作用域的标识值,所以在测试1、2中,它返回的值不受触发器的影响,而在测试3中,因为当前会话无插入记录,所以返回NULL
4、
插入之后马上 select @@identity from youetable 即可
如果是存储过程可以把@@identity作为插入之后的返回值
5、
在查询分析器中获取存储过程中的return的值
declare @return_value int
set @return_value = 1
exec EXT_SUBJECTINSERT_11
"2006","艰难", "高中",
   "语文","问答","知识点","第一期","dd","2006-9-11 8:32:54","重文",
    "insert",1,1,
   "search","dd","fir",@return_value output
select @return_value
6、
DECLARE @tmpCount int
SET @tmpCount int = (SELECT COUNT(*) FROM 表名 WHERE 你要进行搜索的条件)
IF (@tmpCount = 0)
BEGIN
    INSERT 操作
    RETURN 1
END
ELSE
BEGIN
    RETURN 0
END
存储过程来作,存储过程的写法可以参照上面给出的,但是在程序调用的话就需要使用sqlparameter了,关于它的使用方法,可以在网上找到一堆
然后执行sqlcommand,如果仅仅在程序定义了一个返回值参数(returnvalue)那么执行完(excutenoquery)可以由这个参数来判断,如果在数据库和程序中定义了一个返回值参数(output),那么执行完后也可以由这个参数的值进行判断
7、
用int returnValue = Convert.ToInt32(command.ExecuteScalar());执行sql语句,取得返回值
8、
cmd.Parameters["return_value"].Direction=ParameterDirection.ReturnValue;
object o = cmd.Parameters["参数名"].Value;


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hduzh/archive/2009/09/07/4528258.aspx

转载于:https://www.cnblogs.com/tigersong/archive/2010/05/15/1735994.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值