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



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

但是,当我使用此脚本创建该函数时:

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

脚本正在显示错误消息

不正确的语法在关键字"执行"

这是完全正确的 - 您不允许执行任意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。

相关内容

最新更新