SQL Server 中 UDF 的动态表
Posted
技术标签:
【中文标题】SQL Server 中 UDF 的动态表【英文标题】:Dynamic tables from UDF in SQL Server 【发布时间】:2009-10-16 14:40:20 【问题描述】:我该如何决定这个问题?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetDataById] ()
RETURNS INT
AS
BEGIN
DECLARE @query NVARCHAR(500)
DECLARE @j INT
SET @query=N'select * from catalog'
EXEC sp_executesql @query
RETURN @j
END
当我尝试执行这个时:select dbo.GetDataById()
我收到一条错误消息:
只有函数和扩展存储过程可以在函数内执行。
【问题讨论】:
你到底想做什么?这个功能没有意义。 【参考方案1】:来自this post,由 SQL Server MVP Erland Sommarskog 撰写:
您不能使用来自 编写的使用定义函数 T-SQL。这是因为你不是 允许在 UDF 中执行任何 可以改变数据库状态(如 UDF 可以作为 询问)。因为你可以做任何事情 动态 SQL,包括更新,它是 很明显为什么动态 SQL 不是 允许。
【讨论】:
【参考方案2】:您不能在函数中使用动态创建的 SQL。您必须为此使用存储过程。
但在您的情况下,我不明白您为什么还要将查询放入变量中。
【讨论】:
这只是一个例子.. 我有太多的长请求(超过 4000 个符号),数据库中有超过 2000 个表,并且很多查询是不确定的,其中大部分是即时生成的。 . 那么,你需要存储过程。 除非您还需要加入结果并在SELECT
语句中使用它们。那么你要么不知所措,要么陷入了一些非常丑陋的解决方案。以上是关于SQL Server 中 UDF 的动态表的主要内容,如果未能解决你的问题,请参考以下文章