CREATE FUNCTION f_test (@str varchar(100))
RETURNS TABLE
AS
RETURN (select @str)

解决方案 »

  1.   

    CREATE FUNCTION f_test (@str varchar(100))
    RETURNS TABLE
    AS
    RETURN (select @str as aa)
      

  2.   

    if object_id('f_test') is not null drop function f_test
    go
    CREATE FUNCTION f_test (@str varchar(100))
    RETURNS TABLE
    AS
    RETURN (select @str as aa)
    go
    select * from dbo.f_test('1234')
    /*
    aa
    ----
    1234
    */
    drop function f_test
      

  3.   

    我的意思表达错了!!@str在这里是一个输入select查询!
    比如要得到一个select * from test的结果!!
    通过函数select * from f_test('select * from test')
      

  4.   

    你说这样吗!
    CREATE FUNCTION f_test (@str varchar(100))
    RETURNS TABLE
    AS
    RETURN (exec(@str))这样编译都不过!!
      

  5.   

    1.用户自定义函数中不允许执行任何存储过程,所以不能出现关键字exec。
    2.用户自定义函数中不允许使用任何非确定的系统函数,比如getdate()。
      

  6.   

    我的目的是为了在这里代替试图!
    select * from 视图   改动为  select * from fun(@sql)
      

  7.   

    也就是说from后面的源是动态的!!
      

  8.   

    用户定义函数为标量值函数或表值函数。如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。如果 RETURNS 子句指定 TABLE,则函数为表值函数。根据函数主体的定义方式,表值函数可分为行内函数或多语句函数。如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为行内函数。行内函数是使用单个 SELECT 语句定义的表值函数,该语句组成了函数的主体。该函数返回的表的列(包括数据类型)来自定义该函数的 SELECT 语句的 SELECT 列表。如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。 赋值语句。
    控制流语句。
    DECLARE 语句,该语句定义函数局部的数据变量和游标。
    SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
    游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
    INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
    EXECUTE 语句调用扩展存储过程。 
    根据定义,你可以将函数定义成为多语句函数,来调用存储过程
    RETURNS TABLE(a char(10)....)