use [001];
if object_ID('dbo.fn_age') is not null drop function dbo.fn_age;
go
create function dbo.fn_age  
(
@lefttable as varchar(50),
@righttable as varchar(50)
)  
returns varchar(50) as  
begin
declare @backname as varchar(50)
select @backname=a2.Name from @lefttable as a1 left join @righttable as a2
 on a1.ID=a2.ID
return @backname
end
 go
 
提示错误是:消息 1087,级别 16,状态 1,过程 fn_age,第 9 行
必须声明表变量 "@lefttable"。
消息 1087,级别 16,状态 1,过程 fn_age,第 9 行
必须声明表变量 "@righttable"。我是想
自定义一个函数,传入俩个表名,然后根据俩个表名查询某个字段返回

解决方案 »

  1.   

    create proc p( 
     @lefttable nvarchar(50),
     @righttable nvarchar(50), 
     @backname nvarchar(50) output
    )
    as
    begin
    declare @sql nvarchar(1000)
    select @sql = N'select @backname=a2.Name from ' + @lefttable + '
    as a1 left join ' +@righttable + ' as a2 
    on a1.ID=a2.ID'
    exec sp_executesql @sql,N'@backname nvarchar(50) output',@backname output
    select @backname
    end exec 'a','b',@c output
      

  2.   

    函数里面不能执行动态sql,按4楼的就行了
      

  3.   

    if object_ID('dbo.fn_age') is not null drop function dbo.fn_age;
    go
    create function dbo.fn_age   
    (
    @lefttable  varchar(50),
    @righttable  varchar(50)
    )   
    returns varchar(50)
    as   
    begin
    declare @backname as varchar(50)
    select @backname=a2.Name from [@lefttable] as a1 left join [@righttable] as a2
     on a1.ID=a2.ID
    return @backname
    end
     go你的表名用[]就可以了