帮忙看一下这个sql存储过程,里面的单引号和变量把我看晕了,不知道什么意思了!!create proc GetUserInfoReverse
(@CardID varchar(50))
as
declare @f1 varchar(8000),@f2 varchar(8000),@f3 varchar(8000),@f4 varchar(8000),
@f5 varchar(8000),@f6 varchar(8000),@f7 varchar(8000)
select @f1='',@f2='',@f3='',@f4='',@f5='',@f6='',@f7=''
select @f1=@f1+',['+convert(varchar(10),UserID)+']='''+CardID+'''',
   @f2=@f2+','''+UserName+'''',
   @f3=@f3+','''+UserPwd+'''',
   @f4=@f4+','''+convert(varchar(3),UserAge)+'''',
   @f5=@f5+','''+UserSex+'''',
   @f6=@f6+','''+RankTitle+'''',
   @f7=@f7+','''+UserDept+''''
from UserInfo join Rank
on UserRankID=RankID
where CardID=@CardID
exec('select 个人信息=''卡号'''+@f1
+' union all select ''姓名'''+@f2
+' union all select ''密码'''+@f3
+' union all select ''年龄'''+@f4
+' union all select ''性别'''+@f5
+' union all select ''头衔'''+@f6
+' union all select ''所在部门'''+@f7)
go

解决方案 »

  1.   

    有什么好晕的??你在存储中再设个变量, @SQL, 并把EXEC语句注释掉:declare @SQL varchar(8000)SET @SQL = 'select 个人信息=''卡号'''+@f1 
                +' union all select ''姓名'''+@f2 
                +' union all select ''密码'''+@f3 
                +' union all select ''年龄'''+@f4 
                +' union all select ''性别'''+@f5 
                +' union all select ''头衔'''+@f6 
                +' union all select ''所在部门'''+@f7PRINT @SQL这样你就知道到底那个EXEC在干什么了......
      

  2.   

    create proc GetUserInfoReverse 
    (@CardID varchar(50)) 
    as 
    declare @f1 varchar(8000),@f2 varchar(8000),@f3 varchar(8000),@f4 varchar(8000), 
    @f5 varchar(8000),@f6 varchar(8000),@f7 varchar(8000) --定义变量
    select @f1='',@f2='',@f3='',@f4='',@f5='',@f6='',@f7='' --设置初时变量
    select @f1=@f1+',['+convert(varchar(10),UserID)+']='''+CardID+'''', 
      @f2=@f2+','''+UserName+'''', 
      @f3=@f3+','''+UserPwd+'''', 
      @f4=@f4+','''+convert(varchar(3),UserAge)+'''', 
      @f5=@f5+','''+UserSex+'''', 
      @f6=@f6+','''+RankTitle+'''', 
      @f7=@f7+','''+UserDept+'''' 
    from UserInfo join Rank 
    on UserRankID=RankID 
    where CardID=@CardID  --给变量赋值,这个是select变量。就是从表取出值赋值给各个变量
    exec('select 个人信息=''卡号'''+@f1 
    +' union all select ''姓名'''+@f2 
    +' union all select ''密码'''+@f3 
    +' union all select ''年龄'''+@f4 
    +' union all select ''性别'''+@f5 
    +' union all select ''头衔'''+@f6 
    +' union all select ''所在部门'''+@f7)  --进行查询。
    go
    参考1楼的做法,多运行运行查询,看看运行结果,就不糊涂了。
      

  3.   

    说明你其实不懂.....你只要看一个就行了, 比如, 你只看@f1, 其他都注释掉, 然后PRINT出来.....看懂了一个, 其他不就都懂了吗?????
      

  4.   

    我想知道
    select @f1=@f1+',['+convert(varchar(10),UserID)+']='''+CardID+'''', 
      @f2=@f2+','''+UserName+'''', 
      @f3=@f3+','''+UserPwd+'''', 
      @f4=@f4+','''+convert(varchar(3),UserAge)+'''', 
      @f5=@f5+','''+UserSex+'''', 
      @f6=@f6+','''+RankTitle+'''', 
      @f7=@f7+','''+UserDept+'''' 
    from UserInfo join Rank 
    on UserRankID=RankID 
    where CardID=@CardID
    里引号配对的问题
      

  5.   


    先print 出来看看,可以执行不?
      

  6.   

    试试这几个看一看,看几下就明白了
    select ''
    select ''''
    select ''''''
    select '''aa'''