0
日期更新臨時表,我有兩個表:存儲過程基於SQL Server中
Teams [Id],[name],[nomatches],[owngoals],[othergoals],[points]
和
Matches[id],[homeid],[outid],[homegoal],[outgoal],[matchdate]
我有觸發對INSERT,UPDATE,DELETE
所以Teams
表當前得分表的觸發器始終更新。
實施例:
Select * from teams;
結果:
Name NumberOfMatches OwnGoals OtherGoals Points
-------------------------------------------------------
FC Chelsea 33 61 22 68
FC Barcelona 33 46 34 59
FC Man UD 33 57 50 52
問題:
表Matches
具有柱狀matchdate
。我想要重新計算當前比分表(與我的觸發器也許)在輸入日期之前播放的所有遊戲。
我不知道如何創建臨時表來存儲基於Date
參數的重新計算的數據(nomaches,owngoals,其他目標,每個團隊的積分)。
我有什麼至今:
CREATE PROCEDURE check_scoretable
(
@pDate DATE = NULL
)
as
DECLARE @Date DATE = COALESCE(@pDate,GETDATE())
declare @homeid char(3);
declare @outid char(3);
declare @id int;
SELECT * INTO #temp_table2 FROM teams;
SET NOCOUNT ON; -- copy of the teams table
declare cur CURSOR LOCAL for
select homeid, outid
from matches where matches.matchdate < @Date
open cur
fetch next from cur into @homeid, @outid
while @@FETCH_STATUS = 0 BEGIN
select @homeid;
select @outid;
--Increment number of matches
update #temp_table2 set #temp_table2.nomatches = #temp_table2.nomatches+1 where #temp_table2.id = @homeid;
update #temp_table2 set #temp_table2.nomatches = #temp_table2.nomatches+1 where #temp_table2.id = @outid;
fetch next from cur into @homeid, @outid
END
close cur
deallocate cur
-- Test the stored procedure
DECLARE @d DATETIME
SELECT @d = GETDATE()
EXEC check_scoretable @date = @d
你必須使用存儲過程和遊標嗎?這是一個簡單的查詢,沒有遊標開銷。 – Sparky
你能多解釋一下嗎?我必須使用帶有日期參數的存儲過程。 – user2988649