[英]Stored procedure to update temp table based on Date in SQL Server
我有兩個表:
Teams [Id],[name],[nomatches],[owngoals],[othergoals],[points]
和
Matches[id],[homeid],[outid],[homegoal],[outgoal],[matchdate]
我有一個觸發器,它會在INSERT,UPDATE,DELETE
上觸發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
參數重新計算的數據(每個團隊的名次,自有進球,其他進球,得分)。
我到目前為止所擁有的:
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
您可以像完成操作一樣編寫存儲過程,並將日期傳遞給它。
CREATE PROCEDURE check_scoretable
(
@pDate DATE = NULL
)
as
但是,不要像游標那樣做
SELECT tm.name,sum(tm.noMatches) as NumberMatches,sum(tm.ownGoals) as OwnGoals,
sum(tm.otherGoals) as Othergoals,sum(tm.Points) as Points
FROM Team tm
JOIN Matches mc on mc.homeId=tm.id or mc.outId=tm.id
WHERE mc.matchDate <= @pDate
這將為您提供所需的結果。
CAVEAT:您的數據庫設計不好,因為其中包含冗余數據。 例如,當您可以通過以下方式計算比賽數時,您正在跟蹤團隊表中的比賽數
SELECT count(*) FROM matches WHERE homeId=@id or OutId=@id
總體目標的同類操作,等等。
您可能會遇到的問題是,如果由於某種原因而沒有更新團隊記錄,則團隊中列出的比賽數可能不同於將比賽總數相加的比賽數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.