2010-05-12 10 views
5

जब मैं रिकॉर्ड या तो डाला या अपडेट किया जाता है तो मैं सिर्फ "ModifyDate" कॉलम को अपने लिए स्वचालित रूप से पॉप्युलेट करना चाहता हूं।एसक्यूएल सर्वर 2005 - ModifyDate कॉलम - एक संगणित कॉलम का उपयोग कर इसे लागू करने का एक सही तरीका है?

क्या मुझे ट्रिगर्स का उपयोग करना चाहिए या क्या यह गणना की गई कॉलम का उपयोग करना ठीक है?

(SSMS2005 और SQL सर्वर 2005 एक्सप्रेस का उपयोग करना)

+2

एक गणना स्तंभ होगा ** नहीं ** काम करते हैं। यदि आप गणना किए गए कॉलम का मान GETDATE() पर सेट करते हैं, तो यह हमेशा * वर्तमान * दिनांक को वापस कर देगा, अंतिम अद्यतन नहीं। – egrunin

+0

वाह मुझे एहसास नहीं हुआ कि एक चयनित पर गणना कॉलम recompute। धन्यवाद! –

+1

क्या होगा अगर गणना मूल्य जारी रहेगा? –

उत्तर

5

INSERTed भाग आसान है - बस उस कॉलम पर एक डिफ़ॉल्ट मान परिभाषित करें, और जब आप कोई नई पंक्ति डालते हैं, तो उस कॉलम के लिए कोई मान निर्दिष्ट न करें।

अद्यतन भाग ट्रिकियर है - आपको trigger that fires ON UPDATE लिखना होगा, और फिर उस कॉलम को अपडेट करना होगा। मुझे नहीं लगता कि SQL सर्वर में ऐसा करने का कोई और तरीका है।

प्रश्न है: क्या आपको वास्तव में वास्तविक कैलेंडर तिथि की आवश्यकता है? यदि नहीं, तो यदि आप पंक्ति में बदल गए हैं या नहीं, तो केवल "मार्कर" रखना चाहते हैं, इसके बजाय ROWVERSION column type (जिसे पहले TIMESTAMP के नाम से जाना जाता है) देखें।

मैं वास्तव में नहीं देखता कि आप इसके लिए गणना किए गए कॉलम का उपयोग कैसे कर सकते हैं - आपको उस तारीख को कहीं भी स्टोर करना होगा, और इसे INSERT और प्रत्येक आगामी अद्यतन के साथ चालू रखना होगा - केवल एक ट्रिगर ऐसा करने में कामयाब होगा।

2

मैं तुम्हें एक डिफ़ॉल्ट बाधा के बजाय एक गणना स्तंभ मतलब लगता है।

यदि ऐसा है, तो यह ठीक है। मैं इसे ऐसा करना पसंद करता हूं। एक संभावित नुकसान यह है कि एक ग्राहक डिफ़ॉल्ट मान को ओवरराइड कर सकता है, लेकिन यदि आप क्लाइंट पर भरोसा नहीं करते हैं, तो आप संग्रहित प्रक्रियाओं में टेबल एक्सेस को भी लपेट सकते हैं।

ट्रिगर भी काम करेंगे, लेकिन ट्रिगर अतिरिक्त जटिलता उत्पन्न करते हैं। कोडिंग त्रुटियां जिनमें ट्रिगर शामिल हैं, वहां सबसे कठिन डेटाबेस समस्याएं हैं।

+2

डिफ़ॉल्ट अद्यतन पंक्ति को अपडेट करते समय मदद नहीं करता .... जब पहले INSERT होता है तो वे केवल "आग" होते हैं .... –

3

मैं ट्रिगर्स से दूर रहने का सुझाव दूंगा और सर्वर संशोधित कॉलम का उपयोग कर संग्रहीत प्रक्रिया के साथ दिनांक संशोधित कॉलम सेट करूँगा।

उदाहरण:

ग्राहकों अद्यतन प्रथम नाम = 'जिम' सेट, LastName = 'जोन्स, DateModified = getDate()