create PROCEDURE GetResourceCount
    @Sqlstr nvarchar(300),
    @Counts int output
AS
  set @Sqlstr=N'select @counts=sum(1) '+ @Sqlstr
  exec sp_executesql @Sqlstr GO

解决方案 »

  1.   

    create PROCEDURE GetResourceCount
        @Sqlstr nvarchar(300),
        @Counts int output
    AS
      set @Sqlstr=N'select @counts=sum(1) '+ @Sqlstr
      exec sp_executesql @Sqlstr,N'@counts int',@Counts outputGO
      

  2.   

    create PROCEDURE GetResourceCount
        @Sqlstr nvarchar(300),
        @Counts int output
    AS
      set @Sqlstr=N'select @counts=sum(1) '+ @Sqlstr
      exec sp_executesql @Sqlstr,N'@counts int output',@Counts outputGO
      

  3.   

    declare @countss int
    exec GetResourceCount ' from resourcetable' ,@countss output
    selct @countss
      

  4.   

    这样写肯定不对呀
    你把set @Sqlstr='select @counts=sum(1) '+ @Sqlstr
    改成set @Sqlstr='declare @counts int select @counts=sum(1) '+ @Sqlstr
    就不会报错了但明显结果不对我觉得可以改成这样
    create PROCEDURE GetResourceCount
        @Sqlstr nvarchar(300)
    AS
      set @Sqlstr='select count(*) as num '+ @Sqlstr
      exec sp_executesql @Sqlstr exec GetResourceCount ' from resourcetable' 
      

  5.   

    yelook(雨枫) :
    不行!
    sum(1)和count(*)
      不是一样的意思吗?
      要是 有上七八十个字段的话,count(*)很慢的!
      不过你的方法!存储过程里要用游标返回结果呀!人家不想用游标!认为效率低!
    pengdali(大力):
      你的通过了,不过 我直接查询比存储过程还慢半秒钟,怎么回事?!
      还有,你那个 N是什么意思!?
    那位还有什么意见吗?说一下,悉听教诲!谢谢!~~~
      

  6.   

    1、应为那是动态过程exec中相当于一个独立的过程sql需要为它动态建立
    2、例:
    declare @a nvarcahr
    set @a=N'大力'
    ------^^^^加N是标准写法!如果你的windows是英文的,那你直接写'大力'是会错的!
    select @a