कृपया ध्यान दें कि inserted, deleted
का अर्थ inserted CROSS JOIN deleted
जैसा है और प्रत्येक पंक्ति के प्रत्येक संयोजन को देता है। मुझे संदेह है कि आप यही चाहते हैं।
कुछ इस तरह मदद कर सकते हैं आप कार्य आरंभ कर ...
SELECT
CASE WHEN inserted.primaryKey IS NULL THEN 'This is a delete'
WHEN deleted.primaryKey IS NULL THEN 'This is an insert'
ELSE 'This is an update'
END as Action,
*
FROM
inserted
FULL OUTER JOIN
deleted
ON inserted.primaryKey = deleted.primaryKey
कि आप क्या करना चाहते हैं पर निर्भर करता है, तो आप तालिका को देख आप inserted.userID
या deleted.userID
, आदि के साथ में रुचि रखते हैं ।
अंत में, ध्यान रखें कि inserted
और deleted
तालिका हैं और (और करें) में एक से अधिक रिकॉर्ड हो सकते हैं।
यदि आप एक बार में 10 रिकॉर्ड डालते हैं, तो inserted
तालिका में सभी 10 रिकॉर्ड होंगे। यह deletes और deleted
तालिका पर लागू होता है। और एक अद्यतन के मामले में दोनों टेबल।
संपादित Examplee उत्प्रेरक के बाद ऑप्स संपादित करें।
ALTER TRIGGER [dbo].[UpdateUserCreditsLeft]
ON [dbo].[Order]
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE
User
SET
CreditsLeft = CASE WHEN inserted.UserID IS NULL THEN <new value for a DELETE>
WHEN deleted.UserID IS NULL THEN <new value for an INSERT>
ELSE <new value for an UPDATE>
END
FROM
User
INNER JOIN
(
inserted
FULL OUTER JOIN
deleted
ON inserted.UserID = deleted.UserID -- This assumes UserID is the PK on UpdateUserCreditsLeft
)
ON User.UserID = COALESCE(inserted.UserID, deleted.UserID)
END
UpdateUserCreditsLeft
की PrimaryKey UserID के अलावा कुछ है, तो का उपयोग करें कि पूर्ण बाहरी में बजाय शामिल हों।
यह * भी * गलत है क्योंकि इन तालिकाओं में कई पंक्तियां हो सकती हैं, इसलिए एक चर में मान पढ़ने की कोशिश करने से आप उन पंक्तियों के मूल्यों में से एक (जो एक अनिर्धारित है) प्रदान करेगा। –
एक त्रिभुज लिखने के अलावा जो सोचता है कि केवल एक पंक्ति बदली जाएगी जो एक खराब अभ्यास है, आपने अंतर्निहित जोड़ों का उपयोग किया है जो एक एसक्यूएल एंटीपाटर भी है। कभी भी अंतर्निहित जॉइन का उपयोग न करें। अभी आप उस क्रॉस में शामिल हो गए हैं जिसे आप शायद नहीं चाहते थे।शामिल होने के लगभग 20 साल बाद इस तरह के कोड को लिखने में असमर्थ है, जो कि बेहतर स्पष्ट रूप से स्पष्ट रूप से शामिल हो गए थे। – HLGEM