2010-06-06 14 views
24

मैं एसक्यूएल सर्वर अद्यतन उत्प्रेरक का उदाहरण की जरूरत है, एक और तालिका में एसक्यूएल statments निष्पादित करने के लिएएसक्यूएल सर्वर अद्यतन ट्रिगर, पहले खेतों प्राप्त करें और अद्यतन के बाद

उत्तर

69

एसक्यूएल सर्वर 2 "जादू" टेबल कि प्रत्येक पंक्ति है कि, डाला अद्यतन, या बयान है कि ट्रिगर निष्पादित करने की वजह से हटा दिया गया था के लिए एक पंक्ति को रोकने के लिए उपयोग कर सकते है चलाता है।

एक सम्मिलित बयान पर डाला पंक्तियों के सभी खोजने के लिए:

select * from inserted 

एक DELETE कथन पर नष्ट कर दिया पंक्तियों के सभी के लिए:

select * from deleted 

अद्यतन बयान के लिए, प्रत्येक पंक्ति अपडेट नहीं होगा सम्मिलित और हटाए गए दोनों टेबलों में मौजूद है। सम्मिलित तालिका अद्यतन विवरण के बाद पंक्ति का नया मान रखेगी, और हटाई गई तालिका अद्यतन विवरण से ठीक पहले पंक्ति का पुराना मान रखेगी। आपको जो चाहिए वह प्राप्त करने के लिए दो तालिकाओं के बीच जुड़ें:

select i.*, d.* 
from inserted i 
join deleted d on (i.id = d.id) 
+0

+1 हटाए गए और सम्मिलित दोनों तालिकाओं में अद्यतन पंक्तियों के बारे में बिंदु के लिए धन्यवाद। – mdma

+0

जितना मुझे यह समाधान पसंद है, मैं यह इंगित करना चाहता हूं कि ट्रिगर द्वारा संदर्भित तालिका में _if_ प्राथमिक कुंजी नहीं है, 'अपडेट' कथन उपयोगी नहीं होगा :( –

+0

जब तक कोई तरीका है अर्थात् दो तालिकाओं के बीच जुड़ें (जैसे कि सामान्य विवरण का WHERE खंड आमतौर पर उपयोग किया जाता है), यह अर्थपूर्ण होगा, भले ही तालिका में औपचारिक प्राथमिक कुंजी न हो। –

1

आप चाहते हैं विशेष ट्रिगर नष्ट कर दिया इससे पहले कि और अद्यतन के बाद खेतों जाओ और सम्मिलित टेबल MSDN से: तालिकाओं के बीच रेफेरेंन्शिअल सत्यनिष्ठा बढ़ाएँ:

DML में, डाला जाता है और नष्ट कर दिया तालिकाओं मुख्य रूप से निम्नलिखित प्रदर्शन करने के लिए उपयोग किया जाता है चलाता है। दृश्य के अंतर्गत बेस टेबल में डेटा डालें या अपडेट करें। त्रुटियों के लिए परीक्षण और त्रुटि के आधार पर कार्रवाई करें। डेटा संशोधन से पहले और बाद में तालिका की स्थिति के बीच अंतर खोजें और उस अंतर के आधार पर कार्यवाही करें। हटाई गई तालिका DELETE और अद्यतन विवरणों के दौरान प्रभावित पंक्तियों की प्रतियां संग्रहीत करती है। एक हटा या अद्यतन कथन के निष्पादन के दौरान, ट्रिगर तालिका से पंक्तियां हटा दी जाती हैं और हटाई गई तालिका में स्थानांतरित की जाती हैं। हटाई गई तालिका और ट्रिगर तालिका में सामान्य रूप से कोई पंक्ति नहीं होती है। डाला गया तालिका INSERT और अद्यतन विवरणों के दौरान प्रभावित पंक्तियों की प्रतियां संग्रहीत करती है। डालने या अपडेट लेनदेन के दौरान, नई पंक्तियों को सम्मिलित तालिका और ट्रिगर तालिका दोनों में जोड़ा जाता है। डाली गई तालिका में पंक्तियां ट्रिगर टेबल में नई पंक्तियों की प्रतियां हैं।

check here for more info

+0

यह लिंक मर चुका है। क्या आप इसे अपडेट कर सकते हैं? –

+1

@ फेडेरिको ट्राइमन, यह लिंक मेरे लिए काम करता प्रतीत होता है, यह पता लगाया गया है कि एक एमएसडीएन लिंक शायद मृत नहीं होगा। मैंने हालांकि कुछ जवाब सामग्री के शरीर में जोड़ा है। –

+0

अब यह जीवित है! धन्यवाद –

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