我想在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。