create proc getName(@seq int,@tablename varchar(100))      --(@seq,@strSQL)
as 
declare @aa varchar(8000)
set @aa='declare @str varchar(8000) select @str=@str+'',''+f0002 from '+@tablename+' where seq='+cast(@seq as varchar(10))+' select @str 结果'
exec @aa
end 
--调用
exec getName 1,'username'

解决方案 »

  1.   

    create function  getName(@seq varchar(100),@tablename varchar(80))      
    as 
    declare @str varchar(8000)
    select @str=@str+'',''+f0002 from '+@tablename+'  where seq='+@seq+''
    exec (@str)
      

  2.   

    create function  getName(@seq,@tablename)      --(@seq,@strSQL)
    as 
    exec('select'+@str=@str+','+f0002 from'+@tablename+where seq='+@seq')
    end 
      

  3.   

    回复: pengdali(大力 V2.0) 
    报以下错误:Could not find stored procedure ' select @str=@str+','+f0002 
    from viewstock77_78 where p_seq=2 select @str=right(@str,len(@str)-1) '.
      

  4.   

    不能用存储过程,因为我调 用是用
    select getName(seq,'tablenem') from dbtable where seq in (1,2,3,4)
    过程能这样调用吗?
      

  5.   

    像以上各位的说法,在函数内使用 exec('字符')、exec(@strSQL) EXEC @strSQL
    均不行,因为函数必须有返回的数据据。而且在调用时会报找不到存储过程。
      

  6.   

    自定义函数的限制很多的,仅允许 EXECUTE 语句,该语句调用扩展存储过程。 
    这就说明了,如果使用execute,只能调用扩展存储过程,你的那个语句当然不是存储过程,所以只会报错
    _______/下面的具体说明
    函数中的有效语句类型包括: DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
    为函数局部对象赋值,如使用 SET 给标量和表局部变量赋值。
    游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用 FETCH 语句将数据返回到客户端。仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
    控制流语句。
    SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
    INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
    EXECUTE 语句,该语句调用扩展存储过程。 
    在查询中指定的函数的实际执行次数在优化器生成的执行计划间可能不同。示例为 WHERE 子句中的子查询唤醒调用的函数。子查询及其函数执行的次数会因优化器选择的访问路径而异。用户定义函数中不允许使用会对每个调用返回不同数据的内置函数。用户定义函数中不允许使用以下内置函数:@@CONNECTIONS @@PACK_SENT GETDATE 
    @@CPU_BUSY @@PACKET_ERRORS GetUTCDate 
    @@IDLE @@TIMETICKS NEWID 
    @@IO_BUSY @@TOTAL_ERRORS RAND 
    @@MAX_CONNECTIONS @@TOTAL_READ TEXTPTR 
    @@PACK_RECEIVED @@TOTAL_WRITE   
      

  7.   

    其实就你的要求,直接在查询语句中也可以处理,为什么一定要用函数呢?你这样,也可以达到你的要求
    select a.*,(select top 1 name from username where id=a.id)
    from 你的表 aselect a.*,(select top 1 name from userinfo where id=a.id)
    from 你的表 a
      

  8.   

    回:zjcxc(邹建) ( )
    多谢指点!
    但我的要求仅用语句是实现不了的,
    我要的是怎么能传递参数(这个参数为表名)
    因为我想建立一个公用的涵数,而不是当使用不同的表时就得写一个对应的函数。