- 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 ,[email protected]_node_name+''',[email protected][email protected]_copy_node_name+''',node_content,[email protected]_parent_node_id+',node_type,1,getdate(),[email protected]_id+',getdate(),[email protected]_id+',remark from [dbo].[d_dir_lists] where [email protected]_id); else exec('insert into [dbo].[d_dir_lists] select project_id ,node_name,[email protected][email protected]_copy_node_name+''',node_content,[email protected]_parent_node_id+',node_type,1,getdate(),[email protected]_id+',getdate(),[email protected]_id+',remark from [dbo].[d_dir_lists] where [email protected]_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+',[email protected]_node_id+',[email protected]_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