· 8 years ago · Mar 14, 2018, 08:38 PM
1CREATE TABLE dbo.ProcControl
2(
3 ProcName sysname NOT NULL
4 CONSTRAINT PK_ProcControl
5 PRIMARY KEY
6 CLUSTERED
7 , LastExecution datetime NOT NULL
8);
9INSERT INTO dbo.ProcControl (ProcName, LastExecution)
10VALUES (N'dbo.TestProc', '2017-01-01 00:00:00')
11GO
12
13CREATE PROCEDURE dbo.TestProc
14AS
15BEGIN
16 SET NOCOUNT ON;
17 IF NOT EXISTS (
18 SELECT 1
19 FROM dbo.ProcControl pc
20 WHERE pc.ProcName = N'dbo.TestProc'
21 AND pc.LastExecution >= DATEADD(SECOND, -5, GETDATE())
22 )
23 BEGIN
24 /*
25 run the code you want to run at most every 5 seconds.
26 */
27 SELECT Result = 'This is a result'
28 , [Timestamp] = GETDATE();
29 UPDATE dbo.ProcControl
30 SET LastExecution = GETDATE()
31 WHERE ProcName = N'dbo.TestProc';
32 END
33END
34GO
35
36DECLARE @returnVal int;
37EXEC @returnVal = dbo.TestProc;
38PRINT @returnVal;
39EXEC @returnVal = dbo.TestProc;
40PRINT @returnVal;
41WAITFOR DELAY '00:00:06';
42EXEC @returnVal = dbo.TestProc;
43PRINT @returnVal;
44
45IF OBJECT_ID(N'dbo.ProcControl', N'U') IS NOT NULL
46DROP TABLE dbo.ProcControl;
47IF OBJECT_ID(N'dbo.TestProc', N'P') IS NOT NULL
48DROP PROCEDURE dbo.TestProc;
49GO