2010-07-29 8 views
10

में ट्रिगर बनाएं जब मैं SQL Server 2008 R2 के पूर्व-परिभाषित "CREATE TRIGGER" का उपयोग करके ट्रिगर बनाना चाहता था तो मैं खो गया था। क्या आप कृपया मुझे एक सीधा एसक्यूएल कथन दे सकते हैं जिसका उपयोग मैं ट्रिगर बनाने के लिए कर सकता हूं, और मुझे बता सकता हूं कि बाद में, पहले और कैसे परिभाषित किया जाए?SQL सर्वर

इसके अलावा, मैं अद्यतन/निहित/हटाई गई पंक्तियों को कैसे जान सकता हूं, और ट्रिगर के अंदर संचालन करने के लिए उनके कॉलम मानों का उपयोग कैसे कर सकता हूं?

+0

@ जॉन है: उत्पाद "एसक्यूएल सर्वर", नहीं "MSSQL" कहा जाता है। "एमएसएसक्यूएल" को आसानी से "MySQL" से भ्रमित किया जा सकता है। साथ ही, SQL सर्वर प्रश्न पूछते समय, मेरा सुझाव है कि आप "sql-server" टैग का उपयोग करें। "एसक्यूएल" एसक्यूएल भाषा के बारे में सामान्य प्रश्नों के लिए है। –

+0

नोट के लिए ठीक है धन्यवाद। वह करेगा। – johnshaddad

+0

क्या आपका प्रश्न केवल ट्रिगर को परिभाषित करने के बारे में है या यह एक ट्रिगर लिखना है जिसे आप प्रभावित पंक्तियों पर काम करने के लिए उपयोग कर सकते हैं? यदि बाद में, तो आपको अपने प्रश्न को दोबारा विचार करना चाहिए। – Thomas

उत्तर

2

डेटाबेस सेट-उन्मुख हैं और ट्रिगर्स अलग नहीं हैं। एक ट्रिगर आग लग जाएगा जब दिया गया ऑपरेशन किया जाता है और वह ऑपरेशन कई पंक्तियों को प्रभावित कर सकता है। इस प्रकार, प्रश्न "Say I want to know the Primary Key of that row" एक गलत नाम है। कई पंक्तियां डाली जा सकती हैं।

एसक्यूएल सर्वर inserted और deleted नामक ट्रिगर्स के बाद दो विशेष टेबल प्रदान करता है जो किसी क्रिया द्वारा डाली गई या हटाई गई पंक्तियों का प्रतिनिधित्व करते हैं और प्रभावित होने वाली तालिका में समान रूप से संरचित होते हैं। एक अद्यतन ट्रिगर inserted और deleted दोनों को पॉप्युलेट कर सकता है जबकि एक सम्मिलित ट्रिगर केवल inserted तालिका को पॉप्युलेट करेगा।

टिप्पणियों से

:

लेकिन ई-मेल प्राप्तकर्ता का फैसला एक दूसरी तालिका, जहां विदेशी कुंजी आईडी (पहली तालिका में स्थित है जो ट्रिगर के साथ एक है में एक मूल्य पर आधारित होगा

इस प्रश्न का उत्तर inserted तालिका का उपयोग करना है (जो कि आपको पंक्तियों के माध्यम से चक्र के लिए कई पंक्तियां मिलनी चाहिए) और एक ईमेल भेजें। हालांकि, मैं एक ट्रिगर में ईमेल तर्क डालने के खिलाफ अनुशंसा करता हूं। , मैं उस तर्क को संग्रहीत प्रक्रिया में डालने की सलाह दूंगा और अपना ईमेल टी से भेजूंगा टोपी।

संदर्भ के लिए: Create Trigger

+0

और फिर उस प्रक्रिया को ट्रिगर से कॉल करने के लिए? क्या यही मतलब है तुम्हारा?लेकिन क्या ट्रिगर में इसे संभालने के लिए पर्याप्त एसक्यूएल मेलिंग सिस्टम प्रक्रिया नहीं है? या क्या मुझे ऐसी प्रक्रिया बनाना चाहिए जो उस सिस्टम प्रक्रिया को कॉल करे, और फिर इस प्रक्रिया को ट्रिगर में कॉल करें? – johnshaddad

+0

@johnshaddad - नहीं। मैं एक ट्रिगर से ईमेल ऑपरेशन नहीं करता। इसके बजाय, मैं आपके कॉलिंग कोड को मेज के खिलाफ सीधे संचालन के बजाय संग्रहीत प्रो का उपयोग करता। – Thomas

+0

जब आपने कहा "कई पंक्तियां डाली जा सकती हैं।" क्या यह ट्रिगर को कई बार आग नहीं करता है? या कैसे? क्या आप समझा सकते हैं कि मैं इस तरह के मामले में कैसे लूप करूंगा? – johnshaddad

2

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

यह छोटा संस्करण है। MSDN देखें।

+0

संशोधित किया है हां, मैं MySQL पर ट्रिगर्स से परिचित हूं लेकिन एमएसएसक्यूएल पर नहीं, इसलिए मैंने सोचा कि कार्यान्वयन का एक अलग तरीका है। धन्यवाद! – johnshaddad

+0

लेकिन मुझे कैसे पता चलेगा कि कौन सी पंक्ति अपडेट की जा रही है? मान लें कि मैं उस पंक्ति की प्राथमिक कुंजी जानना चाहता हूं, यह कैसे करें? किसी नए आइटम के बाद कोई ईमेल भेजने की इच्छा है, लेकिन ईमेल प्राप्तकर्ता का निर्णय दूसरी तालिका में किसी मान के आधार पर किया जाएगा, जहां विदेशी कुंजी आईडी पहली तालिका में स्थित है (जो ट्रिगर वाला एक है) – johnshaddad

+0

mrdenny जोएल Coehoorn के जवाब के जवाब में टिप्पणी एक अच्छा सारांश है। –

10

बुनियादी वाक्यविन्यास

CREATE TRIGGER YourTriggerName ON dbo.YourTable 
FOR|AFTER INSERT, UPDATE, DELETE 
AS 
BEGIN 
    /*Put what ever you want here*/ 
    UPDATE AnotherTable 
      SET SomeColumn = AnotherColumn 
    FROM inserted | deleted 
END 
GO 
+0

मैं यह कोशिश कर रहा हूं और यह एमएस सर्वर में मेरे लिए काम नहीं कर रहा है। –