ऑरैकल में मैं बिना किसी समस्या के ट्रिगर बनाता हूं, लेकिन tsql में मैं एक बड़ी समस्या रखता हूं :)

मेरे पास एक नौकरी है, जो पंक्तियों को एक तालिका में सम्मिलित करता है:

SELECT wa.IdAnkiety      
     ,wa.IdUsterkiService
      ,wa.LiczbaGlosowTak
       ,wa.LiczbaGlosowNie   FROM [SERV-SQL01].[DomTransfer].[dbo].[D5Cts_WynikiAnkiet] wa   where not
 exists (select wy.IdUsterkiService     from dba.DOM_WyAnkiet wy 
    where   wy.IdUsterkiService=wa.IdUsterkiService     and
 wy.IdAnkiety=wa.IdAnkiety)```

And on this: dba.DOM_WyAnkiet tble I heave a trigger

ALTER trigger [dba].[wyankiet]
on [dba].[DOM_WyAnkiet] AFTER insert
AS
begin

declare @DefectActId uniqueidentifier,
        @tak int,
        @nie int;

    select @DefectActId=IdUsterkiService, @tak=tak, @nie=nie from inserted;

    if @tak>@nie
        update dba.DefectAct set status='49A86504-2E7D-46AB-A022-FC4C3C8CA853', InspectionDate=GETDATE() where DefectActId=@DefectActId;

    if @nie>@tak
        update dba.DefectAct set status='2EDA9FB2-8ED2-43AC-8C30-348D3F060CE3',InspectionDate=GETDATE() where DefectActId=@DefectActId;

    if @nie=@tak
        update dba.DefectAct set status='588B5BAA-F7CE-455D-9489-B2B956949449',InspectionDate=GETDATE() where DefectActId=@DefectActId;

end

लेकिन ऐसा लगता है कि न ही ओरेकल में काम करता है, मैं प्रत्येक पंक्ति के लिए कमांड जोड़ता हूं और ऊपर जैसा कुछ काम करता है।

-1
Kordian Zadrożny 9 नवम्बर 2020, 15:32

1 उत्तर

सबसे बढ़िया उत्तर

एक बहु-पंक्ति डालने को संभालने के लिए। अदिश चर निर्दिष्ट करने के बजाय inserted वर्चुअल तालिका में शामिल हों। नीचे CASE व्यंजक का उपयोग करते हुए इस सेट-आधारित तकनीक का एक उदाहरण (अप्रयुक्त) दिया गया है:

ALTER trigger [dba].[wyankiet]
    ON[dba].[DOM_WyAnkiet] AFTER INSERT
AS
UPDATE da
    set status=
        CASE 
            WHEN i.tak>i.nie THEN '49A86504-2E7D-46AB-A022-FC4C3C8CA853'
            WHEN i.nie>i.tak THEN '2EDA9FB2-8ED2-43AC-8C30-348D3F060CE3'
            WHEN i.nie=i.tak THEN '588B5BAA-F7CE-455D-9489-B2B956949449'
        END
    , InspectionDate=GETDATE()
FROM dba.DefectAct AS da
JOIN inserted AS i ON i.DefectActId=da.DefectActId;
0
Dan Guzman 9 नवम्बर 2020, 12:51