में एक गणना डेटाटाइम कॉलम जारी रखना मेरे पास एक तालिका में एक एक्सएमएल कॉलम है; मैं उस एक्सएमएल में एक निश्चित मूल्य को "गणना" करना चाहता हूं, जो एक गणना कॉलम के रूप में और इसे तेजी से खोज के लिए अनुक्रमणित करता है।SQL सर्वर 2005
ALTER TABLE dbo.CustomMetadataTable ADD [StartDate] AS ([dbo].[fComputeValue]([CustomMetadataColumn])) PERSISTED
मैं निम्नलिखित त्रुटि मिलती है: जब मैं गणना स्तंभ बनाने का प्रयास करें
CREATE FUNCTION [dbo].[fComputeValue] (@data XML)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
RETURN @data.value('(/Metadata/Value[@Key="StartDate"])[1]', 'datetime')
END
हालांकि: मैं एक समारोह है कि इस तरह एक्सएमएल जानकारी में ले जाता है और ब्याज की तत्व आउटपुट, है:
Msg 4936, Level 16, State 1, Line 2 Computed column 'StartDate' in table 'CustomMetadataTable' cannot be persisted because the column is non-deterministic.
यह काम करता है अगर मैं:
- वर्चर, int, डबल (यानी। datetime के अलावा अन्य) को महत्व देता
- कायम कीवर्ड निकालने (लेकिन फिर मैं स्तंभ पर एक सूचकांक)
मैं भी कि datetime मान XSD दिनांक प्रारूप में हैं उल्लेख करना चाहिए नहीं बना सकते। कोई विचार? धन्यवाद।
धन्यवाद के साथ
CONVERT
का उपयोग कर सकते हैं तो यह मदद कर सकता है! मुझे भी यही समस्या थी। मुझे आश्चर्य है कि 127 काम क्यों करते हैं जब दूसरों को नहीं? – harpoयही कारण है: "स्टाइल 106, 107, 109 और 113 के अलावा, 100 से अधिक शैलियां निर्धारक हैं।" –
एल्टर टेबल स्टेटमेंट को बदलने के बजाए, आप fComputeValue FUNCTION परिभाषा को भी बदल सकते हैं: फ़ंक्शन डेटाटाइम को वापस कर सकता है क्योंकि ओपी चाहता था, अगर आप कार्य के शरीर/कार्यान्वयन में शैली 127 के साथ CONVERT का आह्वान करते हैं। – ChrisW