2009-12-04 7 views
14

नोब प्रश्न में एक इंटीजर बढ़ाना, हर बार जब मैं SQL Server 2008 R2 तालिका में एक निश्चित रिकॉर्ड बदलता हूं, तो मैं एक RevisionId रिकॉर्ड को बढ़ाना चाहता हूं; ऐसा करने के लिए, मैं निम्न सिंटैक्स का उपयोग कर रहा:SQL सर्वर

UPDATE TheTable 
SET RevisionId=(SELECT RevisionId 
       FROM TheTable 
       WHERE [email protected]) + 1 
WHERE [email protected]; 

Btw, मैं एक ट्रिगर में इतना है कि यह स्वतः होता है यह डाल करने के लिए जा रहा हूँ, लेकिन जब इस कोड काम करता है, यह बहुत भद्दा — किसी भी क्लीनर का मानना ​​है ऐसा करने का तरीका?

UPDATE TheTable 
SET RevisionId = RevisionId + 1 
WHERE [email protected]; 

उत्तर

34

आप आंतरिक चयन की जरूरत नहीं है:

10

यह एक क्षेत्र बढ़ाने के लिए एक एसक्यूएल मुहावरा है

UPDATE TheTable SET RevisionId = RevisionId + 1 WHERE [email protected] 
+0

सुनिश्चित करें कि आप इसे एक लेनदेन में करते हैं या आप अजीब बग का पीछा करने की कोशिश कर रहे हैं। – Donnie

+8

@ डोनी: आप किसके बारे में बात कर रहे हैं? अद्यतन ... सेट फ़ील्ड = फ़ील्ड + 1 हमेशा परमाणु है। –

1

तुम सिर्फ एक "पंक्ति संस्करण" मूल्य के लिए देख रहे हैं , क्या आपने अपनी तालिका में टाइमस्टैंप कॉलम जोड़ने पर विचार किया है? SQL सर्वर हर बार आपके लिए "स्वचालित रूप से" अपडेट करता है। आपके हिस्से पर कोई कोड नहीं है। यदि आपके लिए यह महत्वपूर्ण है, तो उन्हें अनुक्रमिक रूप से क्रमांकित नहीं किया जाएगा।

+1

यह भी दिलचस्प है, टिप के लिए धन्यवाद! इस मामले में, मैं पंक्ति के कंटेनर को भी अपडेट करना चाहता हूं (मेरे पास तालिका में एक वृक्षारोपण संरचना है), लेकिन एक संशोधन के बजाय एक समय का उपयोग करना भी एक अच्छा विचार हो सकता है –

+0

एसक्यूएल सर्वर का "टाइमस्टैम्प" 64-बिट है आपके डेटा बेस के लिए अनुक्रमिक पूर्णांक। यह बहुत बुरा है इसे टाइमस्टैम्प कहा जाता है क्योंकि इसकी तारीख या समय के साथ बिल्कुल कुछ नहीं है। यह प्रतिकृति प्रक्रियाओं के उपयोग के लिए डिज़ाइन किया गया है। –