在函数错误中添加执行(@query)'执行附近的语法不正确

时间:2012-12-19 03:23:45

标签: sql sql-server-2005

我想在SQL Server 2005中创建一个函数,该函数返回一个查询从我的程序传递的表...

但是当我使用这个脚本创建该函数时:

CREATE FUNCTION fn_test (@source varchar(255))  
RETURNS TABLE AS  
RETURN
    EXECUTE (@source)

脚本显示错误消息

  

关键字“EXECUTE`

附近的语法不正确

1 个答案:

答案 0 :(得分:3)

这是完全正确的 - 您不允许执行任意SQL作为内联table valued function的一部分:

--Transact-SQL Inline Table-Valued Function Syntax 
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

如果需要(*)具有将任意SQL传递到SQL Server对象并让它执行它的工具,请使用存储过程而不是函数。函数并不意味着改变数据库的状态,但任意SQL都可以做任意事情。


(*)你没有。


作为一个程序,它将是:

CREATE PROCEDURE test (@source varchar(255))  
AS
    EXECUTE (@source)

但是在这一点上可能很明显 - 如果你想执行存储为字符串的任意SQL,你也可以直接在它们上面调用EXECUTE。当我把我的(*)放进去的时候,这就是我所暗示的一部分。另一部分是 - 为什么要将它在字符串变量中发送到服务器 - 为什么不发送你想要执行的SQL,如果你是无论如何都要在服务器上运行任意SQL。