2013-04-27 64 views
0

我有兩個表。高級SQL查詢來提升操作

一個是Started_Games

level_id INT 
user_id INT 

另一種是Statistics

stat_id INT 
stat_key NVARCHAR[30] 
stat_value INT 

我的Web應用程序包括遊戲與水平誰只有會員能起到

啓動每個之後。遊戲中,函數被調用並執行以下操作(在一條SQL語句中): 如果沒有包含第用戶的e Id和他開始的遊戲級別 - 將其添加到表Started_Games

當用戶登出我想要做的(僅需要在SQL)以下內容:

首先,選擇遊戲關卡,他開始計數。然後,使用stat_key = StartedGamesCount更新特定行中的Statistics表,並將其添加到找到的計數中。之後,刪除當前用戶的所有記錄(「計數」行);

我從來沒有實現在同一查詢幾個SQL語句,這就是我想出迄今:

DELETE FROM [Started_Games] WHERE [user_id] IN (SELECT COUNT(*) FROM [Started_Games] WHERE [user_id] = @UserId) 

注意它不包括在更新過程中,我想執行。

任何幫助?

回答

0

我建議您編寫更新語句,然後在存儲過程中包含更新和刪除語句,並從您的代碼中調用該語句。如果做不到這一點,你可以只進行兩次數據庫調用,一個做了更新和一個刪除

create procedure sort_out_user @user_id int 
as 
begin 
    update .... 

    delete from .... 
end 

This might help

+0

使多個數據庫調用正是我想要避免的。目前,我不允許使用存儲過程。這個問題被要求幫助我完成一個項目,我需要從現在開始兩個月。 – Novak 2013-04-27 10:37:40

0

可能這對你有所幫助 -

CREATE PROCEDURE dbo.log_out 
(
    @UserId INT 
) 
AS BEGIN 

    INSERT INTO dbo.[Statistics](stat_id, stat_key, stat_value) 
    SELECT [user_id], '???', COUNT(1) 
    FROM dbo.Started_Games 
    WHERE [user_id] = @UserId 
    GROUP BY [user_id] 

    DELETE FROM dbo.Started_Games 
    WHERE [user_id] = @UserId 

END