上面的意思再进一步说即: create procedure Pro1(@T table,@M int) as begin Print('1') end 能行得通不 ?
你可以这样,先定义一个表类型,然后在定义表变量的时候,直接使用该类型即可,例如: 创建表类型: create type dbo.OrderTotalsByYear as table ( orderyear int not null primary key, qty int not null ) 定义一个表变量直接使用表类型: declare @MyOrderTotalsByYear as dbo.OrderTotalsByYear insert into @MyOrderTotalsByYear (orderyear,qty) select YEAR(a.orderdate) as orderyear,SUM(b.qty) as qty from sales.Orders a inner join sales.OrderDetails b on a.orderid=b.orderid group by YEAR(a.orderdate) select * from @MyOrderTotalsByYear 可以将@MyOrderTotalsByYear作为存储过程的参数。但是函数我没试过,另外只限于SQL2008及以上版本。
create proc proc_table @tablename varchar(30) as declare @sql varchar(max)set @sql='select * from '+@tablename+'' print @sql exec(@sql)
create procedure Pro1(@T table,@M int)
as
begin
Print('1')
end
能行得通不 ?
创建表类型:
create type dbo.OrderTotalsByYear as table
(
orderyear int not null primary key,
qty int not null
)
定义一个表变量直接使用表类型:
declare @MyOrderTotalsByYear as dbo.OrderTotalsByYear
insert into @MyOrderTotalsByYear (orderyear,qty)
select YEAR(a.orderdate) as orderyear,SUM(b.qty) as qty from sales.Orders a inner join sales.OrderDetails b on a.orderid=b.orderid group by YEAR(a.orderdate)
select * from @MyOrderTotalsByYear
可以将@MyOrderTotalsByYear作为存储过程的参数。但是函数我没试过,另外只限于SQL2008及以上版本。
@tablename varchar(30)
as
declare @sql varchar(max)set @sql='select * from '+@tablename+''
print @sql
exec(@sql)