sql معنى - الزناد لعدم تحديث البيانات وحذفها




شرح trigger (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 

لدي جدول تبلدكول مع الحقول بروجكتيد، هوليد، X، Y، Z و لوكيد (بت نوع البيانات). أريد إنشاء مشغل لمنع أي تحديث أو حذف للفتحات حيث لوكيد = 1 أو 'ترو'. أريد السماح لأي أوبداتيونس أو حذف أخرى من البيانات إذا الحقل مؤمن هو 0 أو 'فالس' لأي حفرة. منذ أنا جديدة على مشغلات، يرجى تقديم المشورة لي كيفية إنشاء المشغل على تبلدكول.

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

مع أطيب التحيات، دينيش


PostgreSQL :

CREATE TABLE ud (id integer, assid integer);
CREATE TABLE sales (id integer, udid integer, assid integer);

UPDATE ud
SET assid = sales.assid
FROM sales
WHERE sales.id = ud.id;




sql sql-server triggers