create function getData(@tableName varchar(20))
returns table
as
return 
(
begin
   declare @sql varchar(100)
   set @sql='select * from '+@sql
   exec sp_executesql @sql
end
)
服务器: 消息 156,级别 15,状态 1,过程 getData,行 6
在关键字 'declare' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,过程 getData,行 9
第 9 行: ')' 附近有语法错误。

解决方案 »

  1.   


    create function getData
    (@tableName varchar(20))
    returns varchar(8000)
    as
    begin
       declare @sql varchar(100)
       set @sql='select * from '+@sql
       exec sp_executesql @sql
    end
    go
      

  2.   

    create function getData(@tableName varchar(20)) returns table
    as
    begin
       declare @sql varchar(100)
       set @sql='select * from '+@sql
       exec(@sql)
    end
      

  3.   

    二楼中用了存储过程
    三楼用了exec动态语句
    函数中是不能用ddl语句,动态语句,存储过程及非确定性函数的
      

  4.   

    看了楼主的帖子有点不明白:
    先将你的函数改的符合语法再说
    create function getData
    (@tableName varchar(20))
    returns varchar(8000)
    as
    begin
       declare @sql varchar(100)
       set @sql='select * from '+@sql
       exec sp_executesql @sql
    return @sql
    end
    go
    这里参数@tableName,却没有用到。另外@sql,这个参数且不是永远没有值了??
    还有你既然写了returns varchar(8000)。就必须有返回,你这里就算返回@sql。你觉得有意义么?你这完全是一个存储过程来做的事么。。干吗整个函数在这里?