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

डेटाबेस तालिका में सॉर्ट ऑर्डर कॉलम का उपयोग करना

Update product set order = order+1 where order >= @value changed

हालांकि समय के साथ आपको अपने क्रम में बड़े और बड़े "रिक्त स्थान" मिलेंगे लेकिन यह अभी भी "क्रमबद्ध" होगा

यह बदले जा रहे मान में 1 जोड़ देगा और उसके बाद प्रत्येक मान एक कथन में जोड़ देगा, लेकिन उपरोक्त कथन अभी भी सत्य है। आपके क्रम में बड़े और बड़े "रिक्त स्थान" बनेंगे जो संभवतः एक INT मान को पार करने के बिंदु तक पहुंचेंगे।

वैकल्पिक समाधान ने रिक्त स्थान की इच्छा नहीं दी:

इसके लिए एक प्रक्रिया की कल्पना करें:@NewOrderVal, @IDToChange,@OriginalOrderVal

के पैरामीटर के साथ UpdateSortOrder

नया/पुराना ऑर्डर क्रम में ऊपर या नीचे जा रहा है या नहीं, इस पर निर्भर करते हुए दो चरणों की प्रक्रिया।

If @NewOrderVal < @OriginalOrderVal --Moving down chain 

--Create space for the movement; no point in changing the original 
    Update product set order = order+1 
    where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;

end if

If @NewOrderVal > @OriginalOrderVal --Moving up chain

--Create space  for the momvement; no point in changing the original  
  Update product set order = order-1 
  where order between @OriginalOrderVal+1 and @NewOrderVal
end if

--Finally update the one we moved to correct value

    update product set order = @newOrderVal where [email protected];

सर्वोत्तम अभ्यास के संबंध में; अधिकांश वातावरण में मैं आमतौर पर श्रेणी के आधार पर समूहीकृत कुछ चाहता हूं और वर्णानुक्रम में या "बिक्री पर लोकप्रियता" के आधार पर क्रमबद्ध किया गया है, इस प्रकार उपयोगकर्ता परिभाषित प्रकार प्रदान करने की आवश्यकता को नकार रहा है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सिक्योर द्वारा SQL इंजेक्शन अटैक को कैसे रोकें

  2. XML क्रमांकन के लिए StringWriter का उपयोग करना

  3. अभिव्यक्ति SSRS का उपयोग करके दो डेटासेट का उपयोग करके गणना में सहायता चाहिए

  4. Sql सर्वर - विंडोज़ प्रमाणीकरण से कनेक्ट करें

  5. STRING_AGG में DISTINCT मान उत्पन्न करें