2012-09-21 13 views
5

के बिना एक आउटपुट खंड है जिसमें मेरे पास एक ट्रिगर है जो एक ही सम्मिलित रिकॉर्ड की पहचान प्राथमिक कुंजी (MessageId) के मान के साथ सम्मिलित फ़ील्ड (रूटआईडी) में से एक अपडेट करता है। अद्यतन केवल होना चाहिए जब डाला रिकॉर्ड की RootId क्षेत्र 0. ट्रिगर इस तरह दिखता है:कथन में खंड त्रुटि

ALTER TRIGGER [dbo].[Trigger_RootIdUpdate] 
    ON [dbo].[Messages] 
    AFTER INSERT 
AS BEGIN 
    SET NOCOUNT ON; 

    DECLARE @MessageId Int 

    SELECT @MessageId = I.MessageId   
     FROM INSERTED I 
    UPDATE Messages 
     SET RootId = @MessageId 
    WHERE MessageId = @MessageId AND MessageId = 0 

END 

मैं Azure में इसका इस्तेमाल करते हैं और जब मैं एक पंक्ति सम्मिलित, यह मेरे निम्न त्रुटि देता है:

The target table 'dbo.Messagess' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.

एक ही ट्रिगर मेरे असली एमएस एसक्यूएल 2012 पर काम करता है। मुझे लगता है कि सेटिंग्स में कोई अंतर है लेकिन मुझे यह नहीं पता कि वह मुझे क्या बताने की कोशिश करता है।

क्या मैं कुछ ओवरकप्लिकेट कर रहा हूं? धन्यवाद!

+2

कृपया उस विवरण को दिखाएं जिसमें 'आउटपुट' खंड शामिल है। मैंने SQL सर्वर 2008 से पहले उस त्रुटि को देखा है और तालिका चर से चयन करने के बाद 'आउटपुट INTO @ tablevar' का सहारा लेना था। –

+0

मैं इस त्रुटि के कारण रक्षात्मक उद्देश्यों के लिए 2008 R2 में 'OUTPUT INTO @ tablevar' का उपयोग भी करता हूं (साथ ही कोई व्यक्ति ट्रिगर बनाता है)। मैं केवल प्राथमिक कुंजी को आउट करता हूं, और फिर चयन करते समय @tablevar पर शामिल होता हूं क्योंकि यह सभी डेटाटाइप, आईआईआरसी के साथ काम नहीं करता है। –

+0

त्रुटि Azure/Silverlight तालिका संपादक द्वारा उत्पन्न की गई है। मुझे लगता है कि जब मैं वहां एक पंक्ति संपादित करता हूं, तो Azure एक टी-एसक्यूएल कथन उत्पन्न करता है, जिसमें बिना इनपुट के आउटपुट शामिल होता है। एक पंक्ति काम अद्यतन करने के लिए सी #/LINQ कोड का उपयोग करना। –

उत्तर

0

मुझे लगता है कि यह एंथनी हॉर्न द्वारा लिखे गए कार्यों से संबंधित हो सकता है।

क्या यह काम करता है?

ALTER TRIGGER [dbo].[Trigger_RootIdUpdate] 
    ON [dbo].[Messages] 
    AFTER INSERT 
AS BEGIN 
    UPDATE 
    Messages 
    SET 
    Messages.RootId = INSERTED.MessageId 
    FROM Messages Msg 
    JOIN INSERTED ON 
    Msg.MessageId = INSERTED.MessageId 
    WHERE 
    Msg.MessageId = INSERTED.MessageId 
    AND INSERTED.RootId = 0; 
END 
संबंधित मुद्दे