1

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

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

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

脚本显示错误消息

关键字“EXECUTE”附近的语法不正确

4

1 回答 1

3

这是完全正确的——你不能作为内联表值函数的一部分执行任意 SQL :

--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。

于 2012-12-19T07:46:55.963 回答