如何在SQL中将子查询结果的第一个值设置为变量的值

3

我在SQL方面不是很擅长,所以请帮我一下。 在我的存储过程中,我得到了一个参数。然后,根据这个参数,我想从另一个表中获取ID,并将这个ID放入我的另一个变量中,但问题是基于这个参数,ID可以是多个。

DECLARE @RateID int;

SET @RateID = (
    Select [dbo].[Rate].RateID
    from [dbo].[Rate]
    Where [dbo].[Rate].Rate = 160       
)

我这里遇到了错误,因为子查询返回了多个值。如何从子查询结果中获取第一个值并将其设置为 @RateID?

4个回答

2
你可以尝试以下方法:
DECLARE @RateID int;

SET @RateID = (
    Select Top 1 [dbo].[Rate].RateID
    from [dbo].[Rate]
    Where [dbo].[Rate].Rate = 160       
)

在您当前的查询中,可能存在这样一种情况:您的表中有多行满足条件 Rate = 160,因此 select 查询将返回多行结果,您无法将其存储在单个变量中。

然而,在MYSQL中,您需要使用 LIMIT 1,因为 TOP 1 在 MYSQL 中不起作用。


1
如果你只想要第一个结果,可以这样做:
Select TOP 1 [dbo].[Rate].RateID

替代,取代
Select [dbo].[Rate].RateID

1
您可以使用以下语法:

Select top 1
  @RateId = RateId
from
  Rate
where
  Rate.Rate = @Rate
order by
  RateId

如果你想要最后一个,可以将顺序改为:
order by
    RateId Desc

Sql Fiddle 示例


1
你可以使用Top查询,例如:SET @RateID = ( Select Top 1 [dbo].[Rate].RateID from [dbo].[Rate] Where [dbo].[Rate].Rate = 160
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接