Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

इन-मेमोरी उपयोगकर्ता परिभाषित तालिका, स्मृति में नहीं?

मैं यह भी देखता हूं।

जब 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 

जहां तक ​​​​मैं इकट्ठा कर सकता हूं इनमें से कोई भी वास्तव में शब्दार्थ को नहीं बदलता है और कुछ परिस्थितियों में संकेत को छोड़ने की क्षमता सिर्फ एक प्रोग्रामिंग सुविधा है।

मुझे यकीन नहीं है कि मेमोरी टेबल प्रकारों में भिन्न का यह मिश्रण इस विशेष त्रुटि संदेश का कारण क्यों बनता है। मुझे लगता है कि यह सिर्फ एक सीटीपी होने का एक आर्टिफैक्ट है और आरटीएम में या तो संयोजन की अनुमति दी जाएगी या त्रुटि संदेश और दस्तावेज़ीकरण को न केवल डिस्क आधारित तालिकाओं के संदर्भ में अपडेट किया जाएगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका अद्यतन पर, मेरे .NET कोड में एक क्रिया को ट्रिगर करें

  2. SQL सर्वर डेटाबेस में एकाधिक तालिकाओं के लिए प्राथमिक कुंजी बाधा का नाम कैसे बदलें - SQL सर्वर / TSQL ट्यूटोरियल भाग 64

  3. एकाधिक SQL सर्वर एजेंट जॉब्स (T-SQL) के लिए समान शेड्यूल का उपयोग कैसे करें

  4. उत्पादन के लिए एसक्यूएल एक्सप्रेस?

  5. SQL सर्वर सभी ऑपरेटर समझाया गया