其中 参数设置有问题
因为你传过去的是表 所以在存储过程里面的参数类型不应该是varchar() 而是table
改为:
create procedure p
@p1 varchar(50),
@p2 varchar(50),
@t1 table,
@t2 table,
@t3 table
因为你传过去的是表 所以在存储过程里面的参数类型不应该是varchar() 而是table
改为:
create procedure p
@p1 varchar(50),
@p2 varchar(50),
@t1 table,
@t2 table,
@t3 table
set @sql=' declare @sql varchar(8000) --这句有什么用
set @sql='''' --初始化为一个单引号 我想你是: @sql=@sql+''''
不知理解对没有
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 行)
*/