可不可以把表变量作为存储过程/函数的参数用 ?
例如:create procedure Proc1
@T table
as
Select * From @T

解决方案 »

  1.   

    表变量?我没见过这么用的。可以用实体表的表名做参数,然后存储过程里面 exec 动态拼接。
      

  2.   

    上面的意思再进一步说即:
    create procedure Pro1(@T table,@M int)
    as
    begin
      Print('1')
    end
    能行得通不 ?
      

  3.   

    你可以这样,先定义一个表类型,然后在定义表变量的时候,直接使用该类型即可,例如:
    创建表类型:
    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及以上版本。
      

  4.   

    create proc proc_table
    @tablename varchar(30)
    as
    declare @sql varchar(max)set @sql='select * from '+@tablename+''
    print @sql
    exec(@sql)