2009-03-10 15 views
6

में उपयोगकर्ता परिभाषित फ़ंक्शन के साथ दृश्य पर इंडेक्स नहीं बना सकता SQL Server 2005 में, मैं एक अनुक्रमित दृश्य में उपयोगकर्ता परिभाषित फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं जिसका उपयोग पूर्ण-पाठ अनुक्रमणिका में किया जाएगा। मैं यूडीएफ को संग्रहीत प्रक्रिया और प्रश्न में देखने के साथ काम करने में सक्षम हूं। लेकिन, जब मैं दृश्य मैं निम्नलिखित त्रुटि मिलती है पर एक सूचकांक ... बनाने का प्रयास करेंSQL सर्वर

पर दृश्य "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 

उत्तर

12

अनुसार this page रहे हैं:

किसी भी एक अनुक्रमितमें संदर्भित कार्योंदेखें निर्धारक होना चाहिए; निर्धारक फ़ंक्शन उसी मूल्य के साथ प्रत्येक बार को उसी तर्क के साथ वापस लौटाते हैं।

GetCurrentImage इसके मापदंडों के संबंध में निर्धारित करने योग्य नहीं है - तो यह उपयोग कर किसी भी दृश्य अनुक्रमित नहीं किया जा सकता है - यह परिणाम डेटा परिवर्तन के रूप में परिवर्तित हो सकता है जिसका मतलब है कि एक का चयन करें, का उपयोग करता है।

+0

आह ... मुझे अब मिल गया है। मेरे लिए प्रकाश में लाने के लिए धन्यवाद। – Eddie

+1

तो समाधान क्या है? –

+0

मैं भी वास्तव में जानना चाहता हूं कि आपने इस मुद्दे को कैसे पार किया। – Jeremy