首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SCOPE_IDENTITY()的疑惑,该如何处理

2012-06-08 
SCOPE_IDENTITY()的疑惑SQL codeset ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[d_d

SCOPE_IDENTITY()的疑惑

SQL code
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[d_dir_lists_copy_gx]--传入参数(当前要移动的节点ID,将要放入到的那个父ID,用户ID)(@node_id int,@new_parent_node_id int,@user_id int,@copy_node_name nvarchar(200))as--新产生的node_iddeclare @new_node_id intbegin        declare @new_parent_node_url nvarchar(200);        declare @new_copy_node_name nvarchar(200);        declare @index int;        select @new_parent_node_url = node_url from [dbo].[d_dir_lists] where node_id= @new_parent_node_id;        select @index = charindex('.json',@copy_node_name);        if(@index> 0)         select @new_copy_node_name = substring(@copy_node_name,1,len(@copy_node_name)-5);        else         set @new_copy_node_name = @copy_node_name;    --对移动的父节点进行修改        if ( @copy_node_name !=''  and  @copy_node_name is not null)            exec('insert  into   [dbo].[d_dir_lists]   select   project_id ,'''+@copy_node_name+''','''+@new_parent_node_url+'/'+@new_copy_node_name+''',node_content,'+@new_parent_node_id+',node_type,1,getdate(),'+@user_id+',getdate(),'+@user_id+',remark  from  [dbo].[d_dir_lists] where  node_id='+@node_id);                else            exec('insert  into   [dbo].[d_dir_lists]   select   project_id ,node_name,'''+@new_parent_node_url+'/'+@new_copy_node_name+''',node_content,'+@new_parent_node_id+',node_type,1,getdate(),'+@user_id+',getdate(),'+@user_id+',remark from  [dbo].[d_dir_lists] where  node_id='+@node_id);        --得到产生的随机ID        [color=#FF0000]select @new_node_id=IDENT_CURRENT('d_dir_lists');[/color]         [color=#3366FF] --上面这段为什么我换成 select @new_node_id=SCOPE_IDENTITY();就会出错?这个函数受什么限制吗?[/color]        print @new_node_id        exec ('exec [dbo].[copy_insert]'+ @node_id+','+@new_node_id+','+@user_id);    --调用函数返回树型json对象        select '['+dbo.TreePrint(@new_node_id)+']' as json;end


[解决办法]
看下联机帮助,SCOPE_IDENTITY和IDENT_CURRENT区别说的很清楚

exec相当于另一个连接

[解决办法]
作用域的问题,exec相当于另一个作用域,SCOPE_IDENTITY只能取得当前作用域的最后插入的值,也就是说他没有办法获取由exec执行的语句的id值。
http://msdn.microsoft.com/zh-cn/library/ms190315.aspx

热点排行