在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,这意味着结果可能随着数据的变化而变化 - 因此任何使用它的视图都无法编入索引。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top