无法在SQL Server中使用用户定义函数在视图上创建索引
-
08-07-2019 - |
题
在SQL Server 2005中,我试图在索引视图中使用用户定义函数,该视图将用于全文索引。我已经能够让UDF使用存储过程和有问题的视图。但是,当我尝试在视图上创建索引时,我收到以下错误...
无法在视图上创建索引" DevDatabase.dbo.View_PersonSearch"因为函数“dbo.GetCurrentImage”视图引用的视图执行用户或系统数据访问。
我很难过。以下是我想要做的一个例子。我错过了什么或者这甚至可能吗?
用户定义的功能
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetCurrentImage](@Person_ID int)
RETURNS int
WITH SCHEMABINDING
AS
BEGIN
-- Declare the return variable here
DECLARE @Img_ID int
SET @Img_ID = (**sql that selects image** )
RETURN @Img_ID
END
GO
使用索引创建进行查看
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER VIEW [dbo].[View_PersonSearch]
WITH SCHEMABINDING
AS
SELECT Person_ID,
(**Select fields to search on**) AS SearchArea,
dbo.GetCurrentImage(Person_ID) AS FK_Img_ID
FROM dbo.Person
GO
CREATE UNIQUE CLUSTERED INDEX Index_Person_ID ON [View_PersonSearch](Person_ID)
GO
解决方案
根据此页面:
索引中引用的任何函数 观点必须是确定性的; 确定性函数返回 每次重新调用时都会返回相同的值 用相同的论点。
GetCurrentImage在其参数方面不具有确定性 - 它使用select,这意味着结果可能随着数据的变化而变化 - 因此任何使用它的视图都无法编入索引。
不隶属于 StackOverflow