表TEST2
ID UNITNAME VALUE
1 A 3
2 A 6
3 B 2
4 A 3
5 C 6
6 B 1
7 B 5
8 A 1
要实现的是:
定时把表TEST2中的valu按UNITNAME分别求平均值取整,用该平均值定时更新TEST1中相应UNIT的AVG项(如2小时计算更新一次)
如果不用作业如何实现?
...全文
21914打赏收藏
不用作业如何做到?
表TEST1 ID UNIT AVG 1 A 5 2 B 3 3 C 4 表TEST2 ID UNITNAME VALUE 1 A 3 2 A 6 3 B 2 4 A 3 5 C 6 6 B 1 7 B 5 8 A 1 要实现的是: 定时把表TEST2中的valu按UNITNAME分别求平均值取整,用该平均值定时更新TEST1中相应UNIT的AVG项(如2小时计算更新一次) 如果不用作业如何实现?
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)]'
— 删除同名的警报(如果有的话)。
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'Test')
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N'无法导入作业“Test”,因为已经有相同名称的多重服务器作业。', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msdb.dbo.sp_delete_job @job_name = N'Test'
SELECT @JobID = NULL
END
在“企業管理器”中增加作業:
管理 -- SQL Server 代理 -- 作業 -- 新增作業
“步驟”--“新建”,SQL 語句:
UPDATE TEST1 SET AVG=B.AVG
FROM TEST1 A
LEFT JOIN
(
SELECT UNITNAME,AVG(VALUE) AS AVG FROM TEST2 GROUP BY UNITNAME
) AS B
ON A.UNIT=B.UNITNAME