我想在SQL Server 2005中创建一个函数,该函数返回一个查询从我的程序传递的表...
但是当我使用这个脚本创建该函数时:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
脚本显示错误消息
关键字“EXECUTE`
附近的语法不正确
答案 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。