làm thế nào để lên lịch công việc cho truy vấn sql chạy hàng ngày?


Câu trả lời:


164
  1. Mở rộng nút SQL Server Agent và nhấp chuột phải vào nút Jobs trong SQL Server Agent và chọn 'New Job'

  2. Trong 'New Job'cửa sổ, nhập tên công việc và mô tả trên 'General'tab.

  3. Chọn 'Steps'ở phía bên trái của cửa sổ và nhấp vào 'New'ở dưới cùng.

  4. Trong 'Steps'cửa sổ, hãy nhập tên bước và chọn cơ sở dữ liệu mà bạn muốn chạy truy vấn.

  5. Dán lệnh T-SQL bạn muốn chạy vào cửa sổ Lệnh và nhấp vào 'OK'.

  6. Nhấp vào 'Schedule'menu bên trái của cửa sổ Công việc Mới và nhập thông tin lịch trình (ví dụ: hàng ngày và thời gian).

  7. Nhấp vào 'OK'- và đó sẽ là nó.

(Tất nhiên bạn có thể thêm các tùy chọn khác - nhưng tôi muốn nói rằng đó là mức tối thiểu bạn cần để thiết lập và lên lịch công việc)


làm thế nào để làm điều đó trên máy chủ sql express? đại lý có đi kèm với máy chủ sql express với các dịch vụ nâng cao 'không?'
Bilal Fazlani

6
Không cần phải nói rằng tùy thuộc vào người bạn đăng nhập, bạn có thể không nhìn thấy nút SQL Server Agent nào cả ... Không phải ai cũng đăng nhập với tư cách sa. Thông tin thêm (khá khô khan) tại đây .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache

nếu nút SQL Server Agent không thể mở rộng với nhãn "Agent XPs bị vô hiệu hóa", hãy chạy mã sp_configure này 'hiển thị tùy chọn nâng cao', 1; ĐI TÁI HÌNH; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Giải thích theo liên kết này: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya

4
Có thể sử dụng kịch bản BAT, CMD, Powershell cho làm điều đó theo chương trình
Kiquenet

115

Tôi đã tạo ảnh GIF động về các bước trong câu trả lời được chấp nhận. Đây là từ MSSQL Server 2012

Lên lịch công việc SQL


8
GIF - thật sáng tạo! :)
Zeek2

9
Đây sẽ là câu trả lời được ủng hộ nhiều nhất trong stackoverflow.!
Goutham Anush

1
Có phải đăng nhập bằng sa không? Tôi không đăng nhập bằng sa và tôi không thấy tác nhân máy chủ sql. Tôi nghĩ rằng tôi không có đủ quyền để xem nó.
Alper

1
Để xem khu vực SQL Server Agent trong cây menu, người dùng bạn đang đăng nhập cần có quyền chính xác trên cơ sở dữ liệu MSDB (MSDB là cơ sở dữ liệu tích hợp sẵn mà SSMS sử dụng cho những thứ như quyền). Từ trình khám phá cây chính, đi tới Bảo mật> Đăng nhập> tên người dùng của bạn> nhấp chuột phải> thuộc tính> ánh xạ người dùng> kiểm tra msdb> sau đó bên dưới kiểm tra SQLAgentOperatorRole
S.Mason

18

Để thực hiện việc này trong t-sql, bạn có thể sử dụng các thủ tục được lưu trữ trong hệ thống sau đây để lên lịch công việc hàng ngày. Ví dụ này lên lịch hàng ngày lúc 1:00 sáng. Xem trợ giúp của Microsoft để biết chi tiết về cú pháp của các thủ tục được lưu trữ riêng lẻ và phạm vi tham số hợp lệ.

DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

-- Create the job:
EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @job_name=@job_name,
    @step_name=N'Execute SQL', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
    @database_name=@database_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @job_name=@job_name, 
    @enabled=1, 
    @start_step_id=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name, 
    @notify_email_operator_name=N'', 
    @notify_netsend_operator_name=N'', 
    @notify_page_operator_name=N'';

-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
    @job_name=@job_name,
    @name=N'Daily',
    @enabled=1,
    @freq_type=4,
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20170101, --YYYYMMDD
    @active_end_date=99991231, --YYYYMMDD (this represents no end date)
    @active_start_time=010000, --HHMMSS
    @active_end_time=235959; --HHMMSS

2
tuyệt vời. chính xác những gì tôi cần. Cảm ơn bạn :)
AJ.

9

Sử dụng T-SQL: Công việc của tôi là thực hiện thủ tục được lưu trữ. Bạn có thể dễ dàng thay đổi @commandđể chạy sql của mình.

EXEC msdb.dbo.sp_add_job  
   @job_name = N'MakeDailyJob',   
   @enabled = 1,   
   @description = N'Procedure execution every day' ; 

 EXEC msdb.dbo.sp_add_jobstep  
    @job_name = N'MakeDailyJob',   
    @step_name = N'Run Procedure',   
    @subsystem = N'TSQL',   
    @command = 'exec BackupFromConfig';

 EXEC msdb.dbo.sp_add_schedule  
    @schedule_name = N'Everyday schedule',   
    @freq_type = 4,  -- daily start
    @freq_interval = 1,
    @active_start_time = '230000' ;   -- start time 23:00:00

 EXEC msdb.dbo.sp_attach_schedule  
   @job_name = N'MakeDailyJob',  
   @schedule_name = N'Everyday schedule' ;

 EXEC msdb.dbo.sp_add_jobserver  
   @job_name = N'MakeDailyJob',  
   @server_name = @@servername ;

-1

Đây là mã mẫu:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300

21
thêm lời giải thích về mã của bạn trong câu trả lời thường là một ý tưởng hay (ngay cả khi nó rõ ràng đối với bạn).
Nathan Hughes

Câu trả lời này không chứa đủ lời giải thích. Nếu không có đủ lời giải thích độc giả không thể hiểu câu trả lời này.
Jino Shaji,

-2

nếu bạn muốn sao lưu hàng ngày // kho tập lệnh sql sau trong C: \ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.sql

DECLARE @pathName NVARCHAR(512),
 @databaseName NVARCHAR(512) SET @databaseName = 'Databasename' SET @pathName = 'C:\DBBackup\DBData\DBBackUp' + Convert(varchar(8), GETDATE(), 112) + '_' + Replace((Convert(varchar(8), GETDATE(), 108)),':','-')+ '.bak' BACKUP DATABASE @databaseName TO DISK = @pathName WITH NOFORMAT, 
INIT, 
NAME = N'', 
SKIP, 
NOREWIND, 
NOUNLOAD, 
STATS = 10 
GO

mở trình lập lịch tác vụ

tạo tác vụ-> chọn Triggerstab Chọn New.

Nút Chọn nút Radio hàng ngày

bấm vào Oknút

sau đó nhấp vào Actiontab Chọn Mới.

Nút Đặt "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"trong hộp văn bản chương trình / tập lệnh (đảm bảo Phù hợp với đường dẫn tệp của bạn và Đặt đường dẫn được trích dẫn kép vào hộp tìm kiếm-> và nếu nó tìm thấy thì hãy nhấp vào nó và xem bản sao lưu có ở đó hay không )

- đường dẫn trên có thể được ghi 100 ghi 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

sau đó bấm vào nút ok

Script sẽ thực thi đúng thời gian mà bạn chọn trên tab Trigger hàng ngày

tận hưởng nó .............

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.