--获取总记录数create proc [dbo].[test]
@sumcount int output,--总行数
@talname varchar(100),--表名
@strwher varchar(400)--查询条件
as
declare @sql varchar(400)
if @strwher!=''
set @sql=' select '+@sumcount+'=convert(int,count(*))  from ' +@talname
else
 set @sql=' select '+@sumcount+'=convert(int,count(*)) from ' +@talname+' where '+@strwher
exec (@sql) 
--调用
declare @counts int 
exec test @counts output,'Tunnel_menber','' --错误
消息 245,级别 16,状态 1,过程 test,第 8 行
在将 varchar 值 ' select ' 转换成数据类型 int 时失败。

解决方案 »

  1.   

    create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql nvarchar(4000)
    if @strwher!=''
    set @sql=' select @r=convert(int,count(*)) from ' +@talname
    else
     set @sql=' select @r=convert(int,count(*)) from ' +@talname+' where '+@strwher
    exec sp_executesql @sql,N'@r int output',@sumcount output
      

  2.   

    create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql nvarchar(4000)
    if @strwher!=''
    set @sql=' select @r=count(*) from ' +@talname
    else
     set @sql=' select @r=count(*) from ' +@talname+' where '+@strwher
    exec sp_executesql @sql,N'@r int output',@sumcount output
      

  3.   

    set @sql=' select '+@sumcount+'=convert(int,count(*)) from ' +@talname
    else
     set @sql=' select '+@sumcount+'=convert(int,count(*)) from ' +@talname+' where '+@strwher

    set @sql=' select '+ltrim(@sumcount)+'=convert(int,count(*)) from ' +@talname
    else
     set @sql=' select '+ltrim(@sumcount)+'=convert(int,count(*)) from ' +@talname+' where '+@strwher
      

  4.   

    谢谢  Haiwer(海阔天空)的回答 但是小弟愚钝了!!create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql nvarchar(4000)
    if @strwher!=''
    set @sql=' select @r=count(*) from ' +@talname
    else
     set @sql=' select @r=count(*) from ' +@talname+' where '+@strwher
    exec sp_executesql @sql,N'@r int output',@sumcount output--调用
    declare @counts int 
    exec test @counts output,'Tunnel_menber','' --错误
    消息 102,级别 15,状态 1,第 1 行
    'where' 附近有语法错误。能再帮忙看下么 
      

  5.   


    create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql nvarchar(4000)
    if @strwher!=''
    set @sql=' select @r=count(*) from ' +@talname
    else
     set @sql=' select @r=count(*) from ' +@talname+' where 1=1 + and '+@strwher
    exec sp_executesql @sql,N'@r int output',@sumcount output--调用
    declare @counts int  
    exec test @counts output,'Tunnel_menber','' 
      

  6.   

    create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql nvarchar(4000)
    if @strwher!=''
    set @sql=' select @r=count(*) from ' +@talname
    else
     set @sql=' select @r=count(*) from ' +@talname+' where '+@strwher
    exec sp_executesql @sql,N'@r int output',@sumcount output--调用
    declare @counts int  
    exec test @counts output,'Tunnel_menber',''应该是if isnull(@strwher,'')=''   吧!
      

  7.   

    谢谢 AcHerat 的回答 我照你的方法修改后果然没有了语法错误 可是.....create proc [dbo].[test]
    @sumcount int output,--总行数
    @talname varchar(100),--表名
    @strwher varchar(400)--查询条件
    as
    declare @sql varchar(400)
    if @strwher!=''
    set @sql=' select '+ltrim(@sumcount)+'=convert(int,count(*)) from ' +@talname
    else
     set @sql=' select '+ltrim(@sumcount)+'=convert(int,count(*)) from ' +@talname+' where '+@strwher
    exec (@sql) 
    declare @counts int 
    exec test @counts output,'Tunnel_menber','' 
    print '---'+Convert(varchar(100),@counts) 诺诺的问下,想看到输出结果可是....
      

  8.   

    declare @counts int  
    exec test @counts output,'Tunnel_menber',''  
    print '---'+Convert(varchar(100),@counts)  select @counts
    就可以了
      

  9.   

    再次谢谢 AcHerat 也谢谢 Haiwer 的回答 问题终于解决了!!是的:if @strwher!=''
         改为:if isnull(@strwher,'')=''
      

  10.   


    经测试: Haiwer 的第二条回复其实已成功,小弟愚钝了....分给少了,希望下次有机会给补上!