sql - अपडेट करने और डेटा को हटाने के लिए ट्रिगर




sql-server triggers (2)

यदि आप रिकॉर्ड्स को हटाने या अपडेट करने के तर्क को बदलना चाहते हैं, तो आपको "इसके बजाय" ट्रिगर का उपयोग करना चाहिए यह ऐसा होगा:

CREATE TRIGGER [dbo].[TR_utblDHCollRollBack] ON [dbo].[tblDHColl] 
INSTEAD OF UPDATE, DELETE 
AS 
    IF TRIGGER_NESTLEVEL() > 1 RETURN

    DECLARE @Count  INT
    SELECT @Count = COUNT(*) FROM inserted

    IF @Count > 0 -- This is UPDATE

    BEGIN   

        UPDATE c
        SET
        Field1 = i.Field1,
        Field2 = i.Field2,
        /*
        .
        .
        .
        */
        FieldN = i.FieldN
        FROM deleted d 
        INNER JOIN inserted i ON i.Hole_ID = d.Hole_ID
        INNER JOIN tbldhcoll c ON d.DataSet = c.DataSet AND d.Hole_ID = c.Hole_ID 
        where ISNULL(d.locked, 0) != 1
    END

    ELSE 

    BEGIN   

        DELETE c        
        FROM deleted d 
        INNER JOIN tbldhcoll c ON d.DataSet = c.DataSet AND d.Hole_ID = c.Hole_ID 
        where ISNULL(d.locked, 0) != 1

    END
GO 

मेरे पास फ़ील्ड प्रोजेक्ट आईडी, होलीइड, एक्स, वाई, जेड और लॉक (बिट डेटाटाइप) के साथ एक टेबल टीबीडीएचकॉल है। मैं लॉक = 1 या 'ट्रू' के छेद के लिए किसी भी अपडेट या डिलीट को रोकने के लिए ट्रिगर बनाना चाहता हूं। यदि लॉक फ़ील्ड 0 या 'झूठी' किसी भी छेद के लिए है तो मैं डेटा के किसी अन्य अपडेट या विलोपन को अनुमति देना चाहता हूं। चूंकि मैं ट्रिगर करने के लिए नया हूँ, कृपया मुझे सलाह दें कि tblDHColl पर ट्रिगर कैसे बनाएं

CREATE TRIGGER [dbo].[TR_utblDHCollRollBack] ON [dbo].[tblDHColl] 
FOR UPDATE, DELETE 
AS 
    IF EXISTS
    (
        SELECT * 
        FROM deleted d 
        INNER JOIN tbldhcoll c ON d.DataSet = c.DataSet AND d.Hole_ID = c.Hole_ID 
        where locked=1
    ) AND EXISTS
    (
        SELECT * 
        FROM inserted i 
        INNER JOIN tbldhcoll c ON i.DataSet = c.DataSet AND i.Hole_ID = c.Hole_ID 
        where locked=1
    ) 
    BEGIN 
        RAISERROR('ERROR: Validated data cannot be modified',16,-1) 
        ROLLBACK TRANSACTION 
        RETURN 
    END 
GO 

ALTER TABLE [dbo].[tblDHColl] ENABLE TRIGGER [TR_utblDHCollRollBack] GO

तरह का संबंध, दिनेश


टेराडाटा एस्टर लक्ष्य को प्राप्त करने का एक और दिलचस्प तरीका प्रदान करता है:

MERGE INTO ud --what trable should be updated
USING sale -- from what table/relation update info should be taken
ON ud.id = sale.udid --join condition
WHEN MATCHED THEN 
    UPDATE SET ud.assid = sale.assid; -- how to update






sql sql-server triggers