if ltrim(rtrim(@leiBie)) = ltrim(rtrim(@TiDaiZhe))      
                            begin
                                  if left(@_DanWeiBianhao,2)='11' and @MyNianDu='2007'
                                  begin
                                        set @lcstr = 'update #JieGuoBiao set ' + ltrim(rtrim(@BeiTiZhe)) + '=' + ltrim(rtrim(@BeiTiZhe)) + '+' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + ' where ' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + '> 0  and  ' + '''' + @JiBie +'''' + ' = 医院级别 and ' + '''' +  @ZhiCheng + '''' + ' = 职称'+'   and  标准序号='+cast(@biaozhunxuhao as varchar(2))
                set @lcstr =@lcstr+'  and exists  (select 人员编号 from  #tmppeoplecur where #tmppeoplecur.人员编号= #JieGuoBiao.人员编号)'
                                       -- drop table #tmppeople
                                  end
                                  else
                                  begin
set @lcstr = 'update #JieGuoBiao set ' + ltrim(rtrim(@BeiTiZhe)) + '=' + ltrim(rtrim(@BeiTiZhe)) + '+' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + ' where ' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + '> 0  and  ' + '''' + @JiBie +'''' + ' = 医院级别 and ' + '''' +  @ZhiCheng + '''' + ' = 职称'+'  and  标准序号='+cast(@biaozhunxuhao as varchar(2))
          end
                                 exec(@lcstr)

解决方案 »

  1.   

    根据一些变量的值的关系,拼凑sql语句到变量@lcstr ,再执行这个语句
      

  2.   

    if ltrim(rtrim(@leiBie)) = ltrim(rtrim(@TiDaiZhe))     
    --截断所有尾随空格后返回@leiBie和@TiDaiZhe,然后再删除起始空格后返回@leiBie和@TiDaiZhe,判断@leiBie是否等于@TiDaiZhe
    begin 
      if left(@_DanWeiBianhao,2)='11' and @MyNianDu='2007' 
      --字符串左边开始指定个数的字符@_DanWeiBianhao从左开始,返回2个字符,返回的字符=11,并且@MyNianDu='2007' 
      begin 
            set @lcstr = 'update #JieGuoBiao set ' + ltrim(rtrim(@BeiTiZhe)) + '=' + ltrim(rtrim(@BeiTiZhe)) + '+' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + ' where ' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + '> 0  and  ' + '''' + @JiBie +'''' + ' = 医院级别 and ' + '''' +  @ZhiCheng + '''' + ' = 职称'+'  and  标准序号='+cast(@biaozhunxuhao as varchar(2)) 
    --拼更新的SQL语句convert,cast就是类型转换
    set @lcstr =@lcstr+'  and exists  (select 人员编号 from  #tmppeoplecur where #tmppeoplecur.人员编号= #JieGuoBiao.人员编号)' 
          -- drop table #tmppeople 
      end 
      else 
      begin 
    set @lcstr = 'update #JieGuoBiao set ' + ltrim(rtrim(@BeiTiZhe)) + '=' + ltrim(rtrim(@BeiTiZhe)) + '+' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + ' where ' + ltrim(rtrim(@leiBie)) + '-' + ltrim(rtrim(convert(char,@XueFen))) + '> 0  and  ' + '''' + @JiBie +'''' + ' = 医院级别 and ' + '''' +  @ZhiCheng + '''' + ' = 职称'+'  and  标准序号='+cast(@biaozhunxuhao as varchar(2)) 
    --拼更新的SQL语句convert
      end 
      exec(@lcstr)--执行拼的SQL语句
    end
      

  3.   

    print @lcstr
    看看是什么?
      

  4.   

    樓主執行前print @lcstr
    應改就可以看懂了
      

  5.   


    不同情况下更新临时表#JieGuoBiao。
    exec(@lcstr) :执行更新语句。
    这样说可以理解吗