其中 参数设置有问题
因为你传过去的是表 所以在存储过程里面的参数类型不应该是varchar() 而是table 
改为:
create procedure p
@p1 varchar(50),
@p2 varchar(50),
@t1 table,
@t2 table,
@t3 table

解决方案 »

  1.   

    可是SQL server 2000没有table数据类型
      

  2.   

    我不知道你这两句连在一起想表达什么意思?
    set @sql=' declare @sql varchar(8000) --这句有什么用
    set @sql=''''   --初始化为一个单引号 我想你是: @sql=@sql+''''
    不知理解对没有
      

  3.   

    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = 'p'
       AND    type = 'P')
        DROP PROCEDURE p
    GO
    create procedure p
    @p1 varchar(50),
    @p2 varchar(50),
    @t1 varchar(50),
    @t2 varchar(50),
    @t3 varchar(50)
    as
    declare @sql varchar(8000)
    set @sql='
    declare @sql varchar(8000)
    set @sql=''''
    select @sql=@sql+'',sum(case when C.info=''''''+info+'''''' then 1 else 0 end) as ''''''+info+''''''''
    from '+@t3+' group by info
    select @sql=''select (case when grouping(B.info)=1 then ''''合计'''' else B.info end) '''''+@p1+'''''''+@sql
                +'',count(1) as ''''合计''''''
                +'' from '+@t1+' A join '+@t2+' B on A.'+@p1+'=B.id join '+@t3+' C on A.'+@p2+'=C.id''
                +'' group by B.info with rollup''
    exec(@sql)'exec(@sql)
    go
    --调用
    exec p '政治面貌','性别','表1','表2','表3'--结果
    /*
    政治面貌       男           女           合计          
    ---------- ----------- ----------- ----------- 
    __         0           1           1
    共产党员       1           0           1
    共青团员       0           1           1
    群众         1           1           2
    合计         2           3           5(所影响的行数为 5 行)
    */