【问题标题】:Dynamic tables from UDF in SQL ServerSQL Server 中 UDF 的动态表
【发布时间】: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()

我收到一条错误消息:

只有函数和扩展存储过程可以在函数内执行。

【问题讨论】:

  • 你到底想做什么?这个功能没有意义。

标签: sql sql-server tsql user-defined-functions dynamic-tables


【解决方案1】:

来自this post,由 SQL Server MVP Erland Sommarskog 撰写:

您不能使用来自 编写的使用定义函数 T-SQL。这是因为你不是 允许在 UDF 中执行任何 可以改变数据库状态(如 UDF 可以作为 询问)。因为你可以做任何事情 动态 SQL,包括更新,它是 很明显为什么动态 SQL 不是 允许。

【讨论】:

    【解决方案2】:

    您不能在函数中使用动态创建的 SQL。您必须为此使用存储过程。

    但在您的情况下,我不明白您为什么还要将查询放入变量中。

    【讨论】:

    • 这只是一个例子.. 我有太多的长请求(超过 4000 个符号),数据库中有超过 2000 个表,并且很多查询是不确定的,其中大部分是即时生成的。 .
    • 那么,你需要存储过程。 除非您还需要加入结果并在SELECT 语句中使用它们。那么你要么不知所措,要么陷入了一些非常丑陋的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多