2011-12-20 12 views
7

"आंतरिक त्रुटि: एक अभिव्यक्ति सेवाएं सीमा तक पहुंच गई है। कृपया अपनी क्वेरी में संभावित जटिल अभिव्यक्तियों की तलाश करें, और उन्हें सरल बनाने का प्रयास करें।"एसक्यूएल: त्रुटि, अभिव्यक्ति सेवाएं सीमा तक पहुंच गई?

क्या किसी ने इसे पहले देखा है और एक अच्छा कामकाज मिला है?

मैं दो भागों में मेरी SQL क्वेरी अनिवार्य रूप से एक अस्थायी मेज और दूसरे भाग, एक नया एसक्यूएल का चयन करें बयान अस्थायी तालिका से चयन करता है और की बहुत का उपयोग करता है करने के लिए चयन क्वेरी बंटवारे और पहली एसक्यूएल लिख कर इस समस्या के समाधान पाने में कामयाब रहे क्रॉसिंग कंप्यूटेड कॉलम की गणना करने के लिए ऑपरेटर लागू करें।

यह कैसे दूसरे भाग दिखता का एक उदाहरण है, लेकिन मैं उपयोग कर रहा हूँ बहुत अधिक क्रॉस नए कॉलम जो गणना कर रहे हैं निर्माण करने के लिए applys:

Select * from #tempTable   

cross apply 
    (
     select HmmLowestSalePrice = 
     round(((OurSellingPrice + 1.5)/0.95) - (CompetitorsLowestSalePrice) + 0.08, 2) 
    ) as HmmLowestSalePrice 

cross apply 
    (
     select checkLowestSP = 
     case 
     when adjust = 'No Room' then 'No Room' 
     when OrginalTestSalePrice >= CompetitorsLowestSalePrice then 'Minus' 
     when OrginalTeslSalePrice < CompetitorsLowestSalePrice then 'Ok' 
     end 
) as checkLowestSP 

cross apply 
    (
     select AdjustFinalNewTestSP = 
     case 
     when FinalNewTestShipping < 0 Then NewTestSalePrice - (FinalNewTestShipping) 
     when FinalNewTestShipping >= 0 Then NewTestSalePrice 
     end 
) as AdjustFinalNewTestSP 

cross apply 
    (
     select CheckFinalSalePriceWithWP = 
     case 
     when round(NewAdminSalePrice, 2) >= round(wholePrice, 2) then 'Ok' 

     when round(NewAdminSalePrice, 2) < round(wholePrice, 2) then 'Check' 
     end 
    ) as CheckFinalPriceWithWP 


DROP TABLE #tempTable 

एक एसक्यूएल रिपोर्ट में इस डाल करने के लिए करने के लिए मेरा लक्ष्य है और यह ठीक है अगर 1 उपयोगकर्ता केवल #tempTable के रूप में बनाया गया है और उसी निष्पादन में गिरा दिया जाएगा और परिणाम सही ढंग से रिपोर्ट में प्रदर्शित होते हैं। लेकिन भविष्य में यदि समवर्ती उपयोगकर्ता हैं तो मुझे चिंता है कि वे उसी #tempTable पर लिखेंगे जो परिणाम को प्रभावित करेगा?

मैंने इसे संग्रहीत प्रक्रियाओं में डालने पर देखा है लेकिन अभी भी ऊपर त्रुटि संदेश प्राप्त है।

+2

मैं ऐसी दुनिया में जहां हम न पूरी तरह से एक अस्पष्ट, पुरातन सीमा फिट करने के लिए हमारे कोड refactor करने के लिए है का सपना था। यदि आप उस सपने को साझा करते हैं, तो कृपया मेरे कनेक्ट फीडबैक को वोट दें: https://connect.microsoft.com/SQLServer/feedback/details/789949/sql-increase-expression-services-limit-for-complex-nested-in-clauses –

उत्तर

6

यह समस्या तब होती है क्योंकि SQL सर्वर पहचानकर्ताओं और स्थिरांक की संख्या को सीमित करता है जो किसी क्वेरी की एक अभिव्यक्ति में निहित हो सकते हैं। सीमा 65,535 है। एसक्यूएल सर्वर सभी संदर्भित पहचानकर्ताओं और स्थिरांक का विस्तार करने के बाद पहचानकर्ताओं और स्थिरांक की संख्या के लिए परीक्षण किया जाता है। SQL सर्वर 2005 और ऊपर में, क्वेरी आंतरिक रूप से सामान्य और सरलीकृत हैं। और इसमें * (तारांकन), गणना कॉलम इत्यादि शामिल हैं

इस समस्या को हल करने के लिए, अपनी क्वेरी को दोबारा लिखें। क्वेरी में सबसे बड़ी अभिव्यक्ति में संदर्भ कम पहचानकर्ता और स्थिरांक। आपको यह सुनिश्चित करना होगा कि क्वेरी की प्रत्येक अभिव्यक्ति में पहचानकर्ताओं और स्थिरांक की संख्या सीमा से अधिक न हो। ऐसा करने के लिए, आपको एक से अधिक एकल क्वेरी में एक क्वेरी को तोड़ना पड़ सकता है। फिर, एक अस्थायी मध्यवर्ती परिणाम बनाएँ।

+1

क्या आपने इसे मिरोसॉफ्ट साइट से कॉपी और पेस्ट किया था? मैंने एक ही चीज़ पढ़ी है और मैंने परिणामों को एक temp table = intermediate resuly में विभाजित किया है (और इसे काम कर लिया है) लेकिन चिंतित है कि अगर मेरे पास कुछ उपयोगकर्ता थे तो यह – Standage

+3

@Paul - मुझे नहीं लगता कई उपयोगकर्ताओं को होने से कोई समस्या होगी। इस पोस्ट को देखें: http://stackoverflow.com/questions/4725812/temp-table-usuage-in-a-multi-user-environment – TheBoyan

+0

उत्तर के लिए ठीक है! – Standage

1

मुझे बस यह समस्या थी और मेरी तालिका पर अद्वितीय सूचकांक को हटाकर इसे ठीक किया गया। किसी कारण से, यह इस त्रुटि को ट्रिगर करने लगता है, हालांकि यह पता नहीं लगा सकता है कि क्यों।

वैसे, वही क्वेरी कई अन्य अनुक्रमणिका के साथ काम करती है।

1

क्या मेरे लिए काम किया ISNULL के साथ कई COALESCE बयानों की जगह जब भी संभव हो

संबंधित मुद्दे