2009-05-27 6 views
8

मैं जानना चाहता हूं कि पहली स्कैनिंग किताबों पर ऑनलाइन ट्राइगर पर अपडेट ऑपरेशन के दौरान कौन से कॉलम अपडेट किए गए हैं, ऐसा लगता है कि COLUMNS_UPDATED एकदम सही समाधान है, लेकिन यह फ़ंक्शन वास्तव में यह नहीं जांचता कि मूल्य बदल गए हैं या नहीं, यह केवल कॉलम कहां चयनित है खंड अद्यतन करें, किसी के पास अन्य सुझाव हैं?SQL सर्वर ट्रिगर में अद्यतन कॉलम की सूची कैसे प्राप्त करें?

उत्तर

8

एकमात्र तरीका यह है कि आप यह जांच सकते हैं कि मान बदल गए हैं या नहीं, ट्रिगर के भीतर हटाए गए और निहित वर्चुअल टेबल में मानों की तुलना करना है। एसक्यूएल नए अपडेट करने से पहले मौजूदा मान की जांच नहीं करता है, यह खुशी से शीर्ष पर एक नया समान मूल्य लिख देगा - दूसरे शब्दों में, यह आपके शब्द को अद्यतन के लिए लेता है और वास्तविक परिवर्तनों के बजाय अद्यतन ट्रैक करता है।

0

एकमात्र तरीका मैं सोच सकता हूं कि आप हटाए गए मानों की तुलना कर सकते हैं और यह देखने के लिए कि कौन से कॉलम बदल गए हैं।

हालांकि एक विशेष रूप से सुरुचिपूर्ण समाधान प्रतीत नहीं होता है।

0

मैंने this same question से पूछा!

पिछले पोस्टर सही हैं - सीधे मूल्यों की तुलना किए बिना, आप यह सुनिश्चित नहीं कर सकते कि डेटा वास्तव में बदल गया है या नहीं। हालांकि, ट्रिगर में आप और क्या करने की कोशिश कर रहे हैं, इस पर निर्भर करते हुए, इस प्रकार की जांच करने के कई तरीके हैं। मेरे प्रश्न में उन विभिन्न तंत्रों और उनके व्यापारिकताओं के उत्तरों में कुछ अच्छी सलाह है।

4

जैसा कि अन्य ने पोस्ट किया है, आपको निहित और हटाए जाने की पूछताछ की आवश्यकता होगी। सलाह के ही अन्य उपयोगी सा हो सकता है कि आप केवल पंक्तियों मूल्यों को बदल दिया है कि प्राप्त कर सकते हैं (और पंक्तियों को नहीं बदला त्यागने) ऑपरेटर छोड़कर उपयोग करके - इस तरह:

SELECT * FROM Inserted 
EXCEPT 
SELECT * FROM Deleted 
9

हम उपयोग कर सकते हैं समारोह अद्यतन करता है, तो एक विशेष कॉलम अद्यतन किया जाता है खोजने के लिए: http://msdn.microsoft.com/en-us/library/ms187326.aspx

:

IF UPDATE(ColumnName) 

जानकारी के लिए इस लिंक का संदर्भ लें

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