Avatar billede sago Nybegynder
18. september 2004 - 00:48 Der er 10 kommentarer og
1 løsning

Opdatere kolonne en gang om dagen?

Hej,

Jeg har søgt rundt omkring, men jeg er i tvivl om hvad jeg skal bruge for at kunne opdatere en kolonne i en tabel, f. eks. én gang om dagen. Så jeg kan tilføje f. eks. 10 til en værdi, helt automatisk. Jeg bruger MS SQL 2000.

På forhånd tak for hjælpen.
Avatar billede fsconsult.dk Nybegynder
18. september 2004 - 08:54 #1
du skal lave et job i SQL Server Agent, som du kører dagligt, hvor du kører:

UPDATE tabelnavn SET felt = felt + 10;
Avatar billede sago Nybegynder
18. september 2004 - 12:01 #2
Okay, tak - men hvordan kan jeg gøre det uden Enterprise Manager? Jeg har serveren på mit webhotel, så jeg har (desværre!) ikke Enterprise Manager.
Avatar billede fsconsult.dk Nybegynder
19. september 2004 - 10:07 #3
hmm... det var værre ... det kræver stadig adgang til en eller anden form for job afviklings værktøj for at kunne gøre det på tid, og hvis du ikke har adgang til Enterprise Manager, har du vel heller ikke adgang til at benytte Windoze "Scheduled Tasks"..
Avatar billede sago Nybegynder
19. september 2004 - 19:33 #4
Men det er vel serveren der afvikler disse jobs, ikke?
Avatar billede fsconsult.dk Nybegynder
19. september 2004 - 21:16 #5
jo det er serveren der afvikler de sql jobs du vil have til at opdatere databasen, så du bliver nødt til at have lov til at installere disse jobs på serveren på en eller anden måde.
Avatar billede gudjon Nybegynder
21. september 2004 - 09:15 #6
du kan også lave en sp der aldrig afslutter og i den bruger du WAITFOR.

f.eks.
CREATE PROC sp_KorerAltid
AS

WHILE 1 = 1
BEGIN
  WAITFOR TIME '01:00'
  {indsæt din SQL her}
END

Den vil køre indtil SQL Server bliver lukket ned og køre din SQL een gang i døgnet klokken 01:00
Avatar billede fsconsult.dk Nybegynder
21. september 2004 - 10:17 #7
det er en mulighed, der skal så bare lave noget der starter jobbet igen når SQL Serveren genstartes.
Avatar billede gudjon Nybegynder
21. september 2004 - 10:36 #8
Det følgende sql opretter et job i SQL Server. Jobbet eksekveres hver gang SQL Server starter
----------------------------------------------- Script start
-- Script generated on 21-09-2004 10:33
-- By: sa
-- Server: (LOCAL)

BEGIN TRANSACTION           
  DECLARE @JobID BINARY(16) 
  DECLARE @ReturnCode INT   
  SELECT @ReturnCode = 0   
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1
  EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'

  -- Delete the job with the same name (if it exists)
  SELECT @JobID = job_id   
  FROM  msdb.dbo.sysjobs   
  WHERE (name = N'TSQL_Job_1')     
  IF (@JobID IS NOT NULL)   
  BEGIN 
  -- Check if the job is a multi-server job 
  IF (EXISTS (SELECT  *
              FROM    msdb.dbo.sysjobservers
              WHERE  (job_id = @JobID) AND (server_id <> 0)))
  BEGIN
    -- There is, so abort the script
    RAISERROR (N'Unable to import job ''TSQL_Job_1'' since there is already a multi-server job with this name.', 16, 1)
    GOTO QuitWithRollback 
  END
  ELSE
    -- Delete the [local] job
    EXECUTE msdb.dbo.sp_delete_job @job_name = N'TSQL_Job_1'
    SELECT @JobID = NULL
  END

BEGIN

  -- Add the job
  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'TSQL_Job_1', @owner_login_name = N'sa', @description = N'No description available.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

  -- Add the job steps
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'Step 1', @command = N'CREATE PROC sp_KorerAltid
AS

WHILE 1 = 1
BEGIN
  WAITFOR TIME ''01:00''
  {indsæt din SQL her}
END', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 0, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
  EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

  -- Add the job schedules
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'Schedule 1', @enabled = 1, @freq_type = 64
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

  -- Add the Target Servers
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION         
GOTO  EndSave             
QuitWithRollback:
  IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

----------------------------------------------- Script end
Avatar billede fsconsult.dk Nybegynder
21. september 2004 - 10:44 #9
kan ikke helt gennemskue hvad det er du gør, men burde men ikke kunne oprette et job i SQL Server Agent vha. stored procedures, så man får den "pæne" løsning alligevel?
Avatar billede gudjon Nybegynder
21. september 2004 - 11:20 #10
Det koden gør er at den opretter/vedligeholder et job i scheduler via T-SQL. Om du opretter et job i scheduler, kan du bagefter exportere koden således at du kan styre dit job gennem T-SQL.
Det job som blev oprettet i scheduler, er sat til at køre når SQL Server starter og kun der.
Dvs. det er et alternativ til at oprette/vedligeholde et job gennem EM.
Avatar billede sago Nybegynder
27. oktober 2004 - 12:01 #11
Jeg havde glemt at dette spørgsmål ikke var lukket, beklager. 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

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