2009-03-10 36 views
6

Trong SQL Server 2005, tôi đang cố gắng sử dụng chức năng do người dùng xác định trong chế độ xem được lập chỉ mục sẽ được sử dụng trong chỉ mục toàn văn. Tôi đã có thể làm cho UDF làm việc với một thủ tục được lưu trữ và khung nhìn được đề cập đến. Nhưng, khi tôi cố gắng tạo chỉ mục trên chế độ xem, tôi nhận được lỗi sau ...Không thể tạo chỉ mục trên chế độ xem với chức năng do người dùng xác định trong SQL Server

Không thể tạo chỉ mục trên chế độ xem "DevDatabase.dbo.View_PersonSearch" vì chế độ xem thực hiện người dùng hoặc truy cập dữ liệu hệ thống.

Tôi bị bối rối bởi điều này. Dưới đây là một ví dụ về những gì tôi đang cố gắng làm. Tôi có thiếu cái gì đó hay điều này thậm chí có thể?

User Defined Function

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 

View với tạo chỉ mục

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 

Trả lời

12

Theo this page:

Bất kỳ chức năng tham chiếu trong một chỉ mục xem phải xác định; hàm xác định trả về giá trị tương tự mỗi khi chúng được gọi với cùng các đối số.

GetCurrentImage không xác định liên quan đến tham số của nó - nó sử dụng lựa chọn, có nghĩa là kết quả có thể thay đổi khi dữ liệu thay đổi - vì vậy bất kỳ chế độ xem nào sử dụng nó đều không thể lập chỉ mục.

+0

ahhh ... Tôi hiểu ngay bây giờ. Cảm ơn bạn đã đưa nó vào ánh sáng cho tôi. – Eddie

+1

Vậy giải pháp là gì? –

+0

Tôi cũng thực sự muốn biết bạn đã vượt qua vấn đề này như thế nào. – Jeremy

Các vấn đề liên quan