Forsøger du at slippe en logon-trigger i SQL Server, men får du en fejl som følgende?
"Kan ikke slippe triggeren 'trigger_name', fordi den ikke eksisterer, eller du ikke har tilladelse."
Det kan være, fordi du mangler ON ALL SERVER
argument.
Når du opretter en logon-trigger, bruger du ON ALL SERVER
argument.
Du kan også bruge dette argument med DDL-udløsere. Dette argument anvender udløserens omfang på den aktuelle server.
Når du slipper sådanne triggere (dvs. logon-triggere og DDL-triggere, der blev oprettet med ON ALL SERVER
), skal du også bruge ON ALL SERVER
.
Eksempel på fejlen
Jeg begik for nylig denne fejl selv. I mit tilfælde forsøgte jeg at slippe en logon-trigger som denne:
DROP TRIGGER trg_limit_concurrent_sessions;
Men det resulterede i følgende fejl:
Cannot drop the trigger 'trg_limit_concurrent_sessions', because it does not exist or you do not have permission.
Jeg var forvirret, for det var mig, der skabte udløseren. Faktisk havde jeg oprettet det tidligere i samme session!
Men så indså jeg min fejl.
Løsningen
Løsningen var nem – blot tilføje ON ALL SERVER
til min kode.
DROP TRIGGER trg_limit_concurrent_sessions ON ALL SERVER;
Resultat:
Commands completed successfully.
Jeg håber, at denne artikel har hjulpet, hvis du er stødt på den samme fejl.