如何从SQL查询设置变量?
我正在尝试从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语句返回多个值,则会为变量分配最
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--