Avatar billede pablopablo Nybegynder
26. marts 2008 - 10:38 Der er 16 kommentarer og
1 løsning

MS SQL 2005 Trigger

Hejsa...

Jeg har aldrig lavet en DB trigger før, så nu er det vist på tide ;)

Jeg ønsker at lave en simpelt trigger, som blot sletter alle rækker i min tabel "MyTable" hvis kolonnen "CreatedDate" (DateTime) er senere end dags dato og klokkeslæt.

Håber meget I kan hjælpe mig med det!

På forhånd tak :-)

Mvh. PabloPablo
Avatar billede Slettet bruger
26. marts 2008 - 10:58 #1
gå ind i rediger eller design på den pågælende tabel og find knappen med trigger. nu har du muligheden for at lave en new, update eller delete og her kan du skrive din SQL.
eks. delete from MyTable where CreatedDate > now() ...eller noget i den still, det skulle være til at finde ud af.
Avatar billede Slettet bruger
26. marts 2008 - 11:00 #2
men hvis jeg var dig ville jeg lave en Job schedule som udførte den same SQL måske en gang dagligt. Express versionen har ikke denne job mulighed.
Jobs ligger under Management/SQL Server Agent
Avatar billede pablopablo Nybegynder
26. marts 2008 - 12:16 #3
Hej igen, jeg er total newbie indefor dette område...så du må meget gerne fortælle mig i detaljer hvordan jeg skal gøre...hvad er forskellen på en trigger og "Job schedule"...det lyder som noget rigtigt, idet at jeg ønsker at der skal ryddes op i databasen dagligt :)
Avatar billede Slettet bruger
26. marts 2008 - 12:29 #4
en triger afvikler en SQL enten når du opretter en ny record "New", f.eks kan den insætte en CreateDate = Now() så du ikke skal gøre det manuelt, eller "Update" hvis du ændre noget i en record, her kan du f.eks verificere det intastede og til sidst "Delete" hvor du f.eks kan slette records i en anden tabel for at ryde op. Triggers er en godt sted at gemme triviel SQL kode :-)

Jobs er stort set selvforklarende, du følger bare fanebladene når du opretter en ny, med en aktiverings schedule, f.eks Daglig, ugentligt o.s.v. på det tidspunkt jobet bliver aktiveret, vil den afvikle et eller flere steps af SQL kode, som kan være hvad som helst. Meget simpelt eller avanceret, men lige til at gå til. Et job kan f.eks bruget til automatisk backup eller replikereing eller som du er inde på, slette gamle records.
Avatar billede Slettet bruger
26. marts 2008 - 12:32 #5
Husk at starte SQL server Agent (Den skal være grøn) du kan også sætte den til at gøre det selv ved opstart.
Avatar billede Slettet bruger
26. marts 2008 - 12:56 #6
"New" skulle selvfølgelig være "INSERT" :-/

her er et eksempl på en "UPDATE" trigger:

CREATE TRIGGER [Update] ON [dbo].[M_Personnel]
FOR UPDATE
 
AS

UPDATE M_Personnel
SET Updated = getdate (),
[User] = SYSTEM_USER
FROM inserted
Avatar billede pablopablo Nybegynder
26. marts 2008 - 15:07 #7
okay, jeg prøver at kigge på det...

Kan du vise mig hvordan et DELETE Job ser ud:

Det skal slette alle rækker i tabel "MyTable" hvis kolonnen
"CreatedDate" er senere end dags dato og klokkeslæt.

Mvh.
Avatar billede Slettet bruger
26. marts 2008 - 15:35 #8
hmm...

følg træet i venstre side...Management/Sql Server Agent/Jobs
Højreklik på Jobs og vælg New Job og du har en dialogboks
Giv den et navn
Klik på fanen [Steps]
Tryk på knappen [New]
Giv den et Step name
Vælg Database
I det store felt "Command" skriver du denne SQL:

DELETE FROM MyTable WHERE CreatedDate > GetDate()

Klik [OK]
Klik på fanen [Schedules]
Tryk på [New Schedule]
Giv den et navn
Klik på knappen [Change]
Og nu kan du sættet schedulen op, og klik [ok] hele vejen ud igen

Det skulle være det.
Hvis du vil køre den med det samme, kan du højre klikke på den nye schedule og vælge start job.

Så skulle det virke.
Avatar billede pablopablo Nybegynder
26. marts 2008 - 16:15 #9
super mange tak! Jeg vender lige tilbage når jeg har afprøvet det!
Avatar billede pablopablo Nybegynder
27. marts 2008 - 02:42 #10
Hej igen...jeg har kun SQL Server Management Studio Express...SKAL jeg have fat i den fulde udgave for at kunne oprette jobs?
Avatar billede Slettet bruger
27. marts 2008 - 08:14 #11
ja ;-) det var det jeg startede med at skrive. Micro$oft KAN bare ikke lade være med at gøre livet surt for os andre "Lovlydige" borgere

ellers lav den som en trigger der sletter gamle records når du opretter en ny record.

eks.

CREATE TRIGGER [MyTrigger] ON [dbo].[MyTable]
FOR INSERT

AS

DELETE FROM MyTable WHERE CreatedDate > GetDate()


ved ikke om denne lige spiller, men ellers vend tilbage, når du engang vågner :-)
Avatar billede pablopablo Nybegynder
27. marts 2008 - 11:26 #12
Ja det kunne jeg selvfølgelig lave som en nødløsning, men vil gerne lige give Jobs en ekstra chanche...

Altså hvad hedder CD'en hvo¨rpå den fulde udgave af Management Studio ligger på... For jeg har SQL Server 2005 liggende Dev. edt. med der kan jeg ikke finde den på...jeg har pt. Express installeret og den siger derfor også bare, at jeg allerede har en nyere version installeret - men kan heller ikke se den ved at browse cd'en...?-/
Avatar billede Slettet bruger
27. marts 2008 - 11:46 #13
du skal bare afinstalere den express du har nu, *.mdf filerne bliver liggende hvor de er nu og så installere SQL 2005. Management studio er en del af installationen. Til sidst skal du Attache de gamle databaser (*.mdf) så er du køreklar
Avatar billede Slettet bruger
27. marts 2008 - 11:48 #14
SQL server køre som en service og det er her Jobs ligger. denne service er den eneste forskel fra express og developer versionen
Avatar billede pablopablo Nybegynder
27. marts 2008 - 12:34 #15
Hej igen! Så er det fikset og installeret ;)
Nu er datebasen og vores domæne hosted ude i byen, så kan jeg stadig selv sætte Jobs op?

Jeg kan nemlig ikke se punktet: "Sql Server agent"...:(

Tjek: http://www.unicdesign.dk/sqldb.jpg
Avatar billede Slettet bruger
27. marts 2008 - 12:42 #16
Hmm... den kan jeg ikke hjælpe dig med, det må være fordi at din host har fravalgt agenten, såe hvis du vil leje med jobs må du installere sql serveren lokalt
Avatar billede pablopablo Nybegynder
27. marts 2008 - 15:16 #17
Hej igen ...nåå jeg kan ikke få lov til at oprette services i et shared enviroment...så nu hvor det ikke er mere krævende det jeg ønsker, lægger jeg blot koden i en stored procedure.

Du skal have mange tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester