0

我该如何决定这个问题?

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()

我收到一条错误消息:

只能在函数内执行函数和扩展存储过程。

4

2 回答 2

2

来自SQL Server MVP Erland Sommarskog 的这篇文章

您不能从用 T-SQL 编写的已用定义函数中使用动态 SQL。这是因为不允许您在 UDF 中执行任何可能更改数据库状态的操作(因为 UDF 可能作为查询的一部分被调用)。由于您可以通过动态 SQL 执行任何操作,包括更新,因此很明显为什么不允许使用动态 SQL。

于 2009-10-16T15:05:26.697 回答
0

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

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

于 2009-10-16T14:43:04.517 回答