一尘不染

SQL语句未选择

sql

我在C#项目中将SQLServer用于故障排除程序,并且我有一个包含ID,Question,QuestionId,Solution和Rank的表。我希望有一个问题的多个解决方案,并且程序将选择排名最高的解决方案,该解决方案仅由最高的数字来选择,该数字在每次正确时都会递增。为此,我有以下SQL语句:

sql = "SELECT Solution FROM dbo.Questions WHERE Rank=(SELECT MAX(Rank) FROM 
dbo.Questions) AND QuestionId =" + questionId;

当我只有一个可用的解决方案时,它可以很好地工作,但是当我有多个解决方案时,它却不能。


阅读 186

收藏
2021-03-08

共1个答案

一尘不染

您需要适当地参数化您的查询。Bobby Tables:防止SQL注入的指南

sql = "SELECT Solution FROM dbo.Questions q WHERE Rank=(SELECT MAX(Rank) FROM 
dbo.Questions i where i.QuestionId = q.QuestionId) AND q.QuestionId =" + questionId;

这可以确保max(rank)子查询返回的结果是您要查询max(rank)的解决方案的结果QuestionId

如果您只想要一个,也可以执行以下操作Solution

select top 1 Solution 
from dbo.Questions q 
where QuestionId = @QuestionId
order by [Rank] desc
2021-03-08