मैं यह भी देखता हूं।
जब RCSI सक्षम किया जाता है, तो डिफ़ॉल्ट रूप से पढ़ने के लिए प्रतिबद्ध स्तर पर ऑटो कमिट ट्रांजैक्शन ठीक काम करते हैं जब मेमोरी टेबल प्रकार के दो उदाहरणों को एक साथ जोड़ते हैं।
DECLARE @t1 [dbo].[tType]
DECLARE @t2 [dbo].[tType]
INSERT INTO @t1 VALUES (1);
INSERT INTO @t2 VALUES (1);
SELECT *
FROM @t1
JOIN @t2
ON [@t1].C = [@t2].C
दो अलग-अलग "सामान्य" मेमोरी-अनुकूलित तालिकाओं में शामिल होना बिना किसी संकेत के ठीक काम करता है।
इसके अतिरिक्त एक खाली स्मृति-अनुकूलित तालिका प्रकार को सामान्य स्मृति-अनुकूलित तालिका में शामिल करना ठीक काम करता है।
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
लेकिन उलटा सच नहीं है। जब तक मेमोरी टेबल टाइप इंस्टेंस में कम से कम एक पंक्ति होती है तो इसे मेमोरी टेबल में (खाली या अन्यथा) में शामिल करने से त्रुटि उत्पन्न होती है।
समाधान सरल है और त्रुटि संदेश में इंगित किया गया है। बस तालिका संकेत जोड़ें WITH (SNAPSHOT)
DECLARE @t [dbo].[tType]
INSERT INTO @t
VALUES (1)
SELECT *
FROM [dbo].[tTable] t WITH(SNAPSHOT)
INNER JOIN @t
ON [@t].C = t.C
या एक कम दानेदार घोल है
ALTER DATABASE [MemOptimized]
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE
जहां तक मैं इकट्ठा कर सकता हूं इनमें से कोई भी वास्तव में शब्दार्थ को नहीं बदलता है और कुछ परिस्थितियों में संकेत को छोड़ने की क्षमता सिर्फ एक प्रोग्रामिंग सुविधा है।
मुझे यकीन नहीं है कि मेमोरी टेबल प्रकारों में भिन्न का यह मिश्रण इस विशेष त्रुटि संदेश का कारण क्यों बनता है। मुझे लगता है कि यह सिर्फ एक सीटीपी होने का एक आर्टिफैक्ट है और आरटीएम में या तो संयोजन की अनुमति दी जाएगी या त्रुटि संदेश और दस्तावेज़ीकरण को न केवल डिस्क आधारित तालिकाओं के संदर्भ में अपडेट किया जाएगा।