我試圖使用sp_add_jobschedule. 昨天我還獲得了一個非常好的鏈接,在那里我獲得了一些關于如何創造作業的線索。創建存盤程序時出現錯誤:
訊息 102,級別 15,狀態 1,程序 Usp_Create_job,第 19 行 [批處理開始第 81 行]
';' 附近的語法不正確。
訊息 2812,級別 16,狀態 62,第 103 行
找不到存盤程序“sp_add_jobstep”。
訊息 2812,級別 16,狀態 62,第 118 行
找不到存盤程序“dbo.sp_add_jobserver”。
Msg 137, Level 15, State 2, Line 127
必須宣告標量變數“@Frequency”。
我使用以下代碼創建存盤程序。
create procedure Usp_Create_job
as
begin
declare @SP_Name varchar(max)
declare @JobName varchar(max)
declare @Step varchar(max)
declare @ScheduleName varchar(max)
declare @Frequency int
declare @Interval int
declare @Time int
declare @StartDate int
EXEC dbo.sp_add_job
@job_name = N'@JobName', -- passing job name through input parameter while executing SP Usp_Create_job
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa',
@notify_level_eventlog=0 ;
GO
EXEC sp_add_jobstep
@job_name = N'@JobName', --passing job name through input parameter while executing SP Usp_Create_job
@step_id = 1,
@step_name = N'@Step', --passing step name through input parameter while executing SP Usp_Create_job
@subsystem = N'TSQL',
@command = N'
-- actual query
exec @SP_Name',
@retry_attempts = 0,
@retry_interval = 0,
@on_success_action = 1,
@database_name=N'Test' ;
GO
EXEC dbo.sp_add_jobserver
@job_name = N'@JobName', --passing job name through input parameter while executing SP Usp_Create_job
@server_name = N'(local)' ;
GO
EXEC sp_add_jobschedule
@job_name = N'@JobName',
@name = N'test job schedule',
@enabled = 1, --enabled
@freq_type = @Frequency, -- on daily basis input value 4
@freq_interval = @Interval,
@freq_subday_type = 1, -- units between each exec: seconds
@freq_subday_interval = 0, -- number of units between each exec
@active_start_date= @StartDate,
@active_end_date=99991231,
@schedule_uid=N'8912aa53-ffe9-4f31-b6cb-9a8e2f1ee6e3'
end
我已經檢查了幾次代碼,但無法找到確切的問題。任何改進也將不勝感激。
uj5u.com熱心網友回復:
您的代碼存在許多問題。
- 你不能
GO在一個程序中間,它表示一個批次的結束,一個程序必須是一個批次。 - 這些程序位于 中
msdb,您似乎想在該資料庫中創建該程序。您需要先切換到該資料庫。 - 您沒有正確定義引數,您只是創建了區域變數。
- 您不能傳遞包含在引號中的引數,因為這只是意味著它將被視為一個裸字串,例如
'@SP_Name' - 某些資料型別是錯誤的。
@schedule_uid是一個輸出引數,你不需要傳遞它。- 你沒有通過
@ScheduleName。 - 的值
@active_end_date應該用引號引起來。
USE msdb;
GO
CREATE OR ALTER PROCEDURE Usp_Create_job
@SP_Name sysname
@JobName sysname,
@Step sysname,
@ScheduleName sysname,
@Frequency int,
@Interval int,
@Time int,
@StartDate int
AS
DECLARE @command nvarchar(max) = @command = N'
-- actual query
exec ' QUOTENAME(@SP_Name) '
-- more commands here
'
EXEC sp_add_job
@job_name = @JobName, -- passing job name through input parameter while executing SP Usp_Create_job
@category_name = N'[Uncategorized (Local)]',
@owner_login_name = N'sa',
@notify_level_eventlog = 0;
EXEC sp_add_jobstep
@job_name = @JobName, --passing job name through input parameter while executing SP Usp_Create_job
@step_id = 1,
@step_name = @Step, --passing step name through input parameter while executing SP Usp_Create_job
@subsystem = N'TSQL',
@command = @command,
@retry_attempts = 0,
@retry_interval = 0,
@on_success_action = 1,
@database_name = N'Test';
EXEC dbo.sp_add_jobserver
@job_name = @JobName, --passing job name through input parameter while executing SP Usp_Create_job
@server_name = N'(local)' ;
EXEC sp_add_jobschedule
@job_name = @JobName,
@name = @ScheduleName,
@enabled = 1, --enabled
@freq_type = @Frequency, -- on daily basis input value 4
@freq_interval = @Interval,
@freq_subday_type = 1, -- units between each exec: seconds
@freq_subday_interval = 0, -- number of units between each exec
@active_start_date = @StartDate,
@active_end_date = '99991231';
GO
究竟為什么你想要這個而不是僅僅使用 SSMS 漂亮的圖形界面是一個不同的問題......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507047.html
標籤:sql服务器
上一篇:MSSQLLOOP用于計算當前可用庫存中最舊價格的剩余庫存
下一篇:如何在一行中獲得總計和小計?
