我是SQL Server的新手,所以我直接问我一个问题:
假设我有两个桌子
A
(a1 type1,...,ai DATE,频率INT,...,aN typeN)
frequence
代表天数B
(b1 type1,...,bi typei,....,bN typeN)我想做的是在表A上放置一种侦听器,该侦听器侦听每行的“ ai和frequence”属性,然后将行插入表B中,例如:
因此,在表B中的“ 2016-04-01”,“ 2016-05-01”,“ 2016-06-01”等上插入了新行。
我已经找到了这个问题,找到的最相关的答案是使用触发器,但是触发器是在或之后触发的,而不是在触发INSERT/UPDATE/DELETE
且这些操作是硬编码的,不是DBMS(或示例中的当前日期)上面的内容)启动了流程,是客户。
每句话都欢迎。
谢谢,稍后见。
看来您需要预定的作业,因为您不希望将行插入表B时将它们插入表B。预定的作业可以调用存储过程或直接执行SQL查询。
这是创建存储过程的语法:
CREATE PROCEDURE BuildBFromA
AS
BEGIN
DECLARE @Numbers TABLE
(
Number int Primary Key
)
--You get the idea
INSERT into @Numbers
VALUES (0),(1),(2),(3)
--Put your insert query here.
insert B (b1, bi, bN)
Select a1, a1, aN
from a
join @Numbers n on 1=1
where DATEADD(a.aN,n.Number,a.ai) = convert(date,getdate())
END
GO
这是添加预定作业的语法:
USE msdb ;
GO
EXEC dbo.sp_add_job
@job_name = N'Build B' ;
GO
EXEC sp_add_jobstep
@job_name = N'Build B',
@step_name = N'Insert Rows in B based on A',
@subsystem = N'TSQL',
@command = N'EXECUTE BuildBFromA',
@retry_attempts = 5,
@retry_interval = 5 ;
GO
EXEC dbo.sp_add_schedule
@schedule_name = N'RunEveryMinute',
@freq_type = 4,
@active_start_time = 233000;
USE msdb ;
GO
EXEC sp_attach_schedule
@job_name = N'Build B',
@schedule_name = N'RunEveryMinute';
GO
EXEC dbo.sp_add_jobserver
@job_name = N'Build B';
GO
通常,我会在SQLFiddle.com上创建一个示例,但是该站点现在似乎无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句