这短时间一直在跟存储过程打交道,不过都是写一些新增、删除、修改的存储过程,今天遇到一个比较麻烦的问题,贴出来看有没同仁知道怎么有什么新高招。Create Proc 存储过程名
.....
select @wname= w.wtname from dwd w inner join dstep s on s.wid=w.wid where s.sid=@presidset @sqltemp='select @Counts=count(*) from '+@wname+' where fid='+Convert(varchar(50),@fid)+' and hid='+convert(varchar(50),@hid)+' and sid='+convert(varchar(50),@presid)+''
......如代码:
    先由变量@wname接受一个表名,
    根据条件查询@wname表中满足条件的数据行数count(*),同时需要定义一个变量@Counts来获得这个值,提供下面操作,当数据行大于0时执行一种操作,数据行等于0的时候又执行另外一种操作。    顺便问一句,存储过程有嵌套调用吗?请高手指点,等待中....

解决方案 »

  1.   

    执行组装脚本时加入参数,如下:
    set @sqltext = N'update ' + @tblName + ' set '+@fldName+'.Write(@data,'+cast(@colNo as varchar(4))+',datalength(@data))  where '
     + @sceneNoFld + ' = ''' + @sceneNo + ''' and ' + @rowFldName +' = ''' + cast(@rowNo as varchar(8));
    --print @sqltext;
    set @parmDef = N'@data varbinary';
    execute sp_executesql @sqltext,@parmDef,@data=@data
      

  2.   

    按照你的需求,应该如下编写吧:declare @wname varchar(80);
    declare @sqltemp nvarchar(1000);
    declare @Counts int;
    declare @parmDef nvarchar(500);select @wname= w.wtname from dwd w inner join dstep s on s.wid=w.wid where s.sid=@presid 
    set @sqltemp='select @Counts=count(*) from '+@wname+'
    set @parmDef = N'@Counts int OUTPUT';
    execute sp_executesql @sqltemp,@parmDef,@Counts =@Counts OUTPUT;--判断@Counts 即可
      

  3.   

    多谢各位的回复:这是以前我写的,
    declare @pid int,@a int,@sqltemp nvarchar(4000),@fid int,@hid int,@presid int,@wname varchar(50)
    set @fid=2
    set @hid=43
    set @presid=3
    set @wname='dwd_3'
    select @wname= w.wtname from dwd w inner join dstep s on s.wid=w.wid where s.sid=@presid
    set @sqltemp='select @pid=count(*) from '+@wname+' where fid='+Convert(varchar(50),@fid)+' and hid='+convert(varchar(50),@hid)+' and sid='+convert(varchar(50),@presid)+''
    exec sp_executesql @sqltemp,N'@pid  int   output',@pid output
    print(@pid)希望对后面遇到同样问题的同僚有用。