高级SQL查询以提升操作

时间:2013-04-27 10:10:01

标签: sql sql-server

我有两张桌子。

一个是Started_Games

level_id INT
user_id INT

另一个是Statistics

stat_id INT
stat_key NVARCHAR[30]
stat_value INT

我的网络应用程序包含一个只有成员才能玩的关卡游戏。

在开始每个游戏之后,调用一个函数并执行以下操作(在一个SQL语句中): 如果没有包含用户的Id和他开始的游戏级别的记录,请将其添加到表Started_Games

当用户注销时,我想执行以下操作(仅需要SQL):

首先,选择他开始的游戏等级计数。然后,使用Statistics = stat_key更新特定行中的StartedGamesCount表,并将找到的计数添加到其中。之后,删除当前用户的所有记录(“计数”行);

我从未在同一个查询中实现过多个SQL语句,这是我到目前为止所提出的:

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

请注意,它不包括我想要执行的更新过程。

有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

我建议您编写更新语句,然后在存储过程中包含update和delete语句,并从代码中调用它。如果没有你可以做两个数据库调用,一个用于执行更新,一个用于删除

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

  delete from ....
end

This might help

答案 1 :(得分: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