如何从SQL查询设置变量?

如何从SQL查询设置变量?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试从SQL查询设置一个变量: declare @ModelID uniqueidentifer Select @ModelID = select modelid from models where areaid = 'South Coast' 显然我做得不对,因为它不起作用。有人能提出解决办法吗 谢谢 SELECT @ModelID = modelid FROM Models WHERE areaid = 'South Coast' 如果select语句返回多个值,则会为变量分配最

我正在尝试从SQL查询设置一个变量:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'
显然我做得不对,因为它不起作用。有人能提出解决办法吗

谢谢

SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
如果select语句返回多个值,则会为变量分配最后一个返回的值

有关将选择与变量一起使用的参考信息:

使用选择 使用集

警告 如果此SELECT语句返回多个值,则开始时不正确:

当使用SELECT时,变量被指定为womp所说的返回的最后一个值,没有任何错误或警告,这可能会导致逻辑错误 使用SET时,将发生错误 如果查询返回多行,请使用TOP 1

SELECT TOP 1 @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'

在这种情况下,如果您返回了两个或多个结果,那么您的结果就是最后一条记录。因此,如果您可能返回了两条以上的记录,请注意这一点,因为您可能看不到预期的结果。

我更喜欢从declare语句中设置它

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')

您可以使用它,但请记住,您的查询只给出一个结果,多个结果将抛出异常

declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
另一种方式:

Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'
要使用SQL分配变量,请选择最佳做法,如下所示 如果您必须在一行中指定多个变量,您可以使用相同的选择
有三种方法:

-微软推荐的方法 以下查询详细说明了每种方法的优缺点:

-第一条路, 声明@testint=SELECT 1 ,@test2 int=从值1,2 ta中选择一个-抛出错误 -优点:声明和设置在同一位置 -缺点:只能在声明期间使用。以后不能使用 -第二条路 声明@testint ,@test2 int 设置@test=select 1 SET@test2=从值1,2中选择一个ta-抛出错误 -优点:ANSI标准。 -缺点:一次不能设置多个变量 -第三条路 声明@testint、@test2int 选择@test=SELECT 1 ,@test2=从值1,2 ta中选择一个-抛出错误 -优点:一次可以设置多个变量 -缺点:不是ANSI标准
如果此select语句返回多个值:在第一种情况下,变量被指定为womp所说的返回的最后一个值,没有任何错误或警告,这可能会导致逻辑错误;在第二种情况下,将发生错误。顺便说一句,使用SET的情况需要一对括号:SET@ModelID=SELECT…我将使用带SELECT的TOP 1,只有一个结果,例如,SET@ModelID=从模型m中选择TOP 1 m.ModelID,其中m.areaid=‘South Coast’如果在返回多个值时使用SET,那么如何使用异常处理来处理它?有时,如果出现意外的重复结果,而不是悄悄地使用意外的结果,您希望出现错误。这问题“一切就绪”有一个答案,不需要再次回答,我甚至看不出你的答案和小马的答案有什么不同?@JoshuaDuxbury它提供了一个工作拷贝粘贴版本,它是it的唯一标识符。不是UniqueIdentifier。它实际上不会在SQL中导致错误。它将选择最后一条记录,但如果使用此值且不正确,则可能会在应用程序中导致错误。最佳做法-源?如果要从表中选择多个列,则可以改为使用单个select INTO语句轻松分配它重复代码的方法!!
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'
DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'
->DECLARE co_id INT ;
->DECLARE sname VARCHAR(10) ;

->SELECT course_id INTO co_id FROM course_details ;
->SELECT student_name INTO sname FROM course_details;
->DECLARE val1 int;
->DECLARE val2 int;

->SELECT student__id,student_name INTO val1,val2 FROM student_details;

--HAPPY CODING--