插入一条空记录并返回空记录的ID

今天真是郁闷的一天....


今天写一个Stored Procedure.功能是:把表名作为一个变量传入存储过程,然后在该表中插入一条空的记录,并且返回该 记录 的主键ID号.

在表中插入 一条空的记录如下:

 
  
Insert into tablename default values

数据库的字段默认值为null

因为在该存储过程中表名为一个变量(@TableName)
如果这样:

 
  
create procedure insertnull
@TableName varchar ( 50 ),
@Result int
as
insert into @TableName default values // 这一句是会报错的,提示 @tablename没有定义

解决方法如下:

 

 
  
create procedure insertnull
  @TableName varchar ( 50 ),
  @Result int
as
declare @sqlcmd varchar ( 1000 )
  set @sqlcmd = ' insert into ' + @TableName + ' default values '
  exec ( @sqlcmd )

 

 

这样就实现了随便给一个表名就可以在里面插入一条空的记录

现在还有一个问题 就是返回刚刚插入记录的ID值,ID是自增长的int型字段

在SQL中可以使用
               1.SCOPE_IDENTITY()
               2.@@IDENTITY
               3.IDENT_CURRENT()

SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。

@@IDENTITY       返回在当前会话的所有表中生成的最后一个标识值,没有参数


IDENT_CURRENT() 返回为任何会话和任何作用域中的指定表最后生成的标识值, 其中的参数,是表名


因此,对于这种情况,建议大家慎用 @@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之。SCOPE_IDENTITY() 也是得到最后一条自增域的值,但是它是仅限在一个操作范围之内,而不@@IDENTITY 是取全局操作的最后一步操作所产生的自增域的值的


当在Exec(@sqlcmd) 后添加 set @Result=SCOPE_IDENTITY()是,调用返回的值却为 null
上网差了好多的资料也没有解决,可能是 因为变量生存周期的问题.


如何是把表名"写死"的话就可以

 

 
  
create procedure insertnull
@resultid int output
as
insert into tablename default values
set @resultid = SCOPE_IDENTITY ()

 

 

在此代码中可以实现上面的功能:为表tablename中插入一条空的记录 ,并返回 该记录的id值,但是表名是"死"的,不够灵活
如果要用变量来代替表明,那就要拼字符串 ,用exec(@sql)去 执行这条SQL语句,但是 下面的set @resultid=SCOPE_IDENTITY()的值却为空.........

转载于:https://www.cnblogs.com/wangshuai/archive/2009/12/30/1635689.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值