首页 新闻 搜索 专区 学院

存储过程 大侠帮帮忙 这个抽象的写法我真的不行 急 谢谢

0
悬赏园豆:10 [已解决问题] 解决于 2012-09-05 11:47
ALTER PROCEDURE [dbo].[S_DB_TFDB_ADD]
@UserID int,
@UserName varchar(20),
@Password varchar(20),
@GroupCode varchar(50),
@RoleID varchar(20),
@tableName varchar(20),
@Num int 
 AS 
 begin
 declare @ChildTableSysUser varchar(2000), @id int,@ChildTableUserRole varchar(2000),@i int,@Role varchar(2000)
   set   xact_abort   on 
   begin   tran
     set @ChildTableSysUser='insert into '+@tableName+'.dbo.S_SysUser(UserName,Password,GroupCode)values('''+@UserName+''','''+@Password+''','''+@GroupCode+''')'  
     print @ChildTableSysUser
     exec (@ChildTableSysUser) 
     
     select @id=@@identity;
     print @id
     
     insert into S_SysUser_Child(UserID,UserName,Password,GroupCode,RoleID) values(@id,@UserName,@Password,@GroupCode,@RoleID) 

     select @i=0
     while  @i<@Num
        begin
         set @ChildTableUserRole='insert into '+@tableName+'.dbo.S_UserRole(UserID,RoleID) values('+convert(nvarchar(20),@id)+','+@RoleID+')' 
         print @ChildTableUserRole 
         exec(@ChildTableUserRole)
         set @i=@i+1 
   commit   tran    
end

 set @ChildTableUserRole='insert into '+@tableName+'.dbo.S_UserRole(UserID,RoleID) values('+convert(nvarchar(20),@id)+','+@RoleID+')'

这个里面的@RoleID的格式是 '0,1,2,3,4'

我现在已经找了个函数分割好了

如何取出里面的 值 循环插入到set @ChildTableUserRole='insert into '+@tableName+'.dbo.S_UserRole(UserID,RoleID) values('+convert(nvarchar(20),@id)+','+@RoleID+')'

就是替换那个@RoleID

KyrieYang的主页 KyrieYang | 初学一级 | 园豆:5
提问于:2012-09-01 17:03
< >
分享
最佳答案
0

用游标取值吧 然后插入

收获园豆:5
s_p | 菜鸟二级 |园豆:295 | 2012-09-05 11:47
其他回答(1)
0
'insert into '+@tableName+'.dbo.S_UserRole(UserID,RoleID) 
select '+convert(nvarchar(20),@id)+',a from f_split('''+@RoleID+''','','')'
收获园豆:5
向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-01 17:20

呵呵 ok了 在网上看了下游标  取值 我不是要分割的问题

ALTER PROCEDURE [dbo].[S_DB_TFDB_ADD]
@UserID int,
@UserName varchar(20),
@Password varchar(20),
@GroupCode varchar(50),
@RoleID varchar(20),
@tableName varchar(20)
 AS
 begin
 declare @ChildTableSysUser varchar(2000),@ChildTableUserRole varchar(2000),@Table varchar(200),@id int,@i int
   set xact_abort on
   begin tran
     --插入子表S_SysUser
     set @ChildTableSysUser='insert into '+@tableName+'.dbo.S_SysUser(UserName,Password,GroupCode)values('''+@UserName+''','''+@Password+''','''+@GroupCode+''')'  
     --print @ChildTableSysUser
     exec (@ChildTableSysUser)
     
     --获取上次插入S_SysUserID
     select @id=@@identity;
     --print @id
     
     --插入S_SysUser_Child
     insert into S_SysUser_Child(UserID,UserName,Password,GroupCode,RoleID) values(@id,@UserName,@Password,@GroupCode,@RoleID)

     declare cr_cursor cursor --定义游标
     for select * from dbo.f_split(@RoleID,',')
     open cr_cursor --打开游标
     fetch From cr_cursor into @Table --提取游标
     while @@fetch_status=0
         begin
             set @ChildTableUserRole='insert into '+@tableName+'.dbo.S_UserRole(UserID,RoleID) values('+convert(nvarchar(20),@id)+','+@Table+')'
             --print @ChildTableUserRole
             exec(@ChildTableUserRole)
             fetch next From cr_cursor into @Table
         end;
     close cr_cursor --关闭游标
     deallocate cr_cursor --释放游标
     
   commit  tran    
end

支持(0) 反对(0) KyrieYang | 园豆:5 (初学一级) | 2012-09-01 17:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册