我想在 SQL Server 2005 中创建一个函数,该函数返回一个表,查询从我的程序传递...
但是当我用这个脚本创建那个函数时:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
脚本显示错误消息
关键字“EXECUTE”附近的语法不正确
我想在 SQL Server 2005 中创建一个函数,该函数返回一个表,查询从我的程序传递...
但是当我用这个脚本创建那个函数时:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
脚本显示错误消息
关键字“EXECUTE”附近的语法不正确
这是完全正确的——你不能作为内联表值函数的一部分执行任意 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。