Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL Server存储过程更新用户排名_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

使用SQL Server存储过程更新用户排名

使用SQL Server存储过程更新用户排名,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有两个表,一个包含用户数据,另一个包含用户排名信息(促销所需的点数) 假设用户表如下所示: login | ArticlePoints | PhotoPoints | StageId 用户排名信息表如下所示: StageId | StageName | MinimumPoints 1 | Beginner | 100 2 | Advanced | 200 3 | Expert | 300 用户信息表可能包含如下数据: StageId | StageName | MinimumPoin

我有两个表,一个包含用户数据,另一个包含用户排名信息(促销所需的点数)

假设用户表如下所示:

login | ArticlePoints | PhotoPoints | StageId
用户排名信息表如下所示:

StageId | StageName | MinimumPoints
1 | Beginner | 100
2 | Advanced | 200
3 | Expert   | 300
用户信息表可能包含如下数据:

StageId | StageName | MinimumPoints
1 | Beginner | 100
2 | Advanced | 200
3 | Expert   | 300
我想要的是一个程序,添加用户点,并检查它是否足以提升排名。现在我是这样做的:

login | ArticlePoints | PhotoPoints | StageId
  • 我确实有一个功能,它可以“手动”检查用户点数是否在100到200之间,然后设置用户stage=2,更重要的是检查用户点数是否在200到300之间,等等
  • 从点1开始执行更新users set stage=My函数的存储过程
  • 问题是,这不是一个好的解决方案,现在它还没有准备好进行简单的更新(我不能只添加至少400分的超级专家,我需要编辑函数)


    我正试图为这个问题准备一个更好的解决方案,但我不知道如何“连接”这两个表。

    编写一个
    UPDATE
    查询,返回计算值的
    StageID
    ,例如:

    UPDATE t1
    SET t1.StageID = 
            (SELECT TOP 1 StageID 
             FROM [RANKING_TABLE] t2 
             WHERE t1.ArticlePoints + t1.PhotoPoints >= t2.MinimumPoints 
             ORDER BY t2.MinimumPoints DESC)
    FROM [USER_TABLE] t1
    

    因此,如果用户总共有250分,则可以通过使用
    TOP 1
    按t2排序来达到初学者和高级。MinimumPoints DESC
    将选择最高的阶段。

    谢谢,一般来说,它会完成这项工作,但出于某种原因,它不想接受[USER\u TABLE]t1它说t1不应该在那里,它要求设置。因此,内部选择不会选择正确的值(如果删除t1)。我不认为我的解决方案是一个过度的尝试,我修改了查询,将别名正确地放在FROM子句中,这是我的错误