create proc 过程名 (@列名 varchar(100))
as
exec('select '+@列名+' from 表名')
go--调用:
exec 过程名 'aaa'

解决方案 »

  1.   

    函数内不能用exec,你可以这样用过程:create table #临时表 (结构和返回结构相同)insert #临时表 exec 你的过程 '参数'select * from #临时表
      

  2.   


    create function f_name (@id int)
    returns int
    as
    return @id
    go
    执行:
    select dbo.f_name(是int的字段) from tableName
      

  3.   

    谢谢各位的回答,不过还是没有满足我的需求。我这个函数之所以要返回一个表,其实我是想返回一个类似于(1,2,3,4)的东西,
    然后构成一个where条件 TreeId in (1,2,3,4),  TreeId列是整数类型。
    这样我就可以在实现在查询记录集时
    用一条sql语句就可以实现判断某列所代表的树节点是否在允许的某棵变化的子树上了。
    当然,这条sql语句是相当复杂了。
    我以前试过用函数返回一个字符串,形如“1,2,3,4”的,但是这样sql server会报
    类型不匹配的错误。于是才想到用函数返回一个表。
    但是没想到这时传递列作为函数参数不行,所以才想问大家怎么能够把列作为参数
    传递给表值函数(一般类型的返回值函数是没有问题的,这我也试过。)
      

  4.   

    返回表是没有问题的.你看我的例子函数,返回的就是一个表集.--创建字符串分拆的函数
    create function fsplit(
    @str varchar(8000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @re table(istr varchar(8000))
    as
    begin
    declare @i int,@splen int
    select @splen=len(@spli)
    ,@i=charindex(@spli,@str)
    while @i>0
    begin
    insert into @re values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    ,@i=charindex(@spli,@str)
    end
    if @str<>'' insert into @re values(@str)
    return
    end
      

  5.   

    如果要将函数结果做为查询语句中的一部分来使用,你就必须用访问表的方法来使用它.
    比如,要利用上面的函数来查询:
    select * from 表 
    where treeid in(select * from dbo.fsplit('1,2,3,4',','))  --既然返回结果是表集,就要用表的方法去写.而不能写成:
    select * from 表 where treeid in dbo.fsplit('1,2,3,4',',')  --这个写法就错了.