webForumDet fria alternativet

Trigger i MSQL (Before delete)

6 svar · 329 visningar · startad av SteveP

StevePMedlem sedan mars 2003751 inlägg
#1

Denna triggern använder jag i en Oracle db.

create trigger kundtrigger
on kunder before delete
referencing old as oldRow
as
begin
  delete from telnr where kundid = : oldRow.id;
end kundtrigger;

Kan jag köra before delete i mssql? Får inte riktigt till den.

När jag deleterar nåt från tblMAIN så vill jag att alla poster i tblSUB som är relaterade till tblMAIN ska tas bort.

Relationen görs genom ett värde som finns i tblMAIN.MainCat och detta värde ligger i tblSUB.SubCat

StevePMedlem sedan mars 2003751 inlägg
#2

Nuså!

CREATE TRIGGER TR_DollsPics ON tblMAIN FOR DELETE
AS
BEGIN
SET NOCOUNT ON

DELETE FROM tblSUB WHERE tblSUB.SubCat in(SELECT MainCat FROM deleted)
END
StevePMedlem sedan mars 2003751 inlägg
#3

Kan nån förklara vad SET NOCOUNT ON gör?

@ndersMedlem sedan juni 200026 914 inlägg
#4

SET NOCOUNT ON stänger av rowcount för varje fråga som exekveras. Det kanske skulle vara mer logiskt om man skrev SET COUNT OFF eller så. :)

Nu vet jag inte vad det skulle spela för roll i en trigger, och i det här fallet känns den onödig, eftersom du bara exekverar ett SQL-statement i din trigger.

Men vad vet jag! :)

StevePMedlem sedan mars 2003751 inlägg
#5

Ok så man kan använda det till att se hur många Rows som blev affected av triggern? och isf hur får man ut denna rowcount om man har NOCOUNT OFF?
E det som i SP's?
typ SELECT @total_rows = @@ROWCOUNT

LarsGMedlem sedan dec. 200012 465 inlägg
#6

Set NOCOUNT OFF påverkar inte @@rowcount. Det innebär bara att SQL server inte skickar information om antalet poster som påverkats till klienten.

StevePMedlem sedan mars 2003751 inlägg
#7

Jaha såpas. E det nån performance förbättring att ha NOCOUNT ON om man har flera statements som inte returnerar nån större data? Syftar i synnerhet på SP's

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb