create function strName(@bTable varchar(50),@bCol varchar(50))
returns varchar(8000)
as
begin
 declare @bName varchar(8000)
 set @bName=''
 select @bName=@bName+','+rtrim(@bCol) from @bTable
 return(substring(@bName,2,8000))
end在这个函数中,@bTable是表名,@bCol是指定的列名,用来将指定的列的名称联结到一起,再输出出来,提示这个错误:必须声明变量 '@bTable',请问高手怎么解决啊?

解决方案 »

  1.   

    create function strName(@bTable varchar(50),@bCol varchar(50))
    returns varchar(8000)
    as
    begin
     declare @bName varchar(8000)
     set @bName=''
     select @bName=@bName+','+rtrim(@bCol) from @bTable
     return(substring(@bName,2,8000))
    end这个函数是错的,如果这样写的话。将@bTable赋值'syscolumn'
    执行select @bName=@bName+','+rtrim(@bCol) from @bTable
    相当于执行select @bName=@bName+','+rtrim(@bCol) from 'syscolumn'
    所以应该用存储过程实现,里面调用动态sql语句。

    create procedure pro_strName
    @bTable varchar(50),
    @bCol varchar(50)
    as
    declare @bName varchar(8000)
    declare @s varchar(8000)
    set @bName=''
    set @s='select *  from '+@bTable
    exec(@s)
      

  2.   

    函数中不支持动态SQL语句。也不支持表名是变量。