谢谢!
#1 楼
使用SELECT:SELECT @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
使用SET:
SET @ModelID = (SELECT m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast')
有关使用SELECT和TSQL中的SET。
警告
如果此select语句返回多个值(开头不正确):
使用
SELECT
时,该变量被分配了返回的最后一个值(如womp所说),没有任何错误或警告(这可能会导致逻辑错误)使用
SET
时,会发生错误评论
如果此select语句返回多个值:在第一种情况下,为变量分配返回的最后一个值(如womp所说),而没有任何错误或警告(这可能会导致逻辑错误);在第二种情况下,将发生错误。
–牛cis
10-10-20在5:01
顺便说一句,使用SET的情况需要一对方括号:SET @ModelID =(SELECT ...)
–牛cis
10-10-20在5:03
我会将TOP 1与select一起使用,以仅得到1个结果,例如SET @ModelID =(从模型m中的顶部选择1 m.modelid m.areaid ='South Coast')
–TPAKTOPA
16年5月16日在11:51
如果使用set时返回多个值,那么如何使用异常处理来处理呢?
– Aasim
18年7月19日在2:47
有时,如果出现意外的重复结果,而不是悄悄地使用意外的结果,那么您会希望出错。
–丹尼斯·斯基德莫尔(Denise Skidmore)
18-10-12在17:53
#2 楼
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
如果您的select语句返回多个值,则会为变量分配最后返回的值。
有关将SELECT与变量一起使用的参考:http://msdn.microsoft.com/zh-cn/library/aa259186%28SQL.80%29.aspx
#3 楼
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
评论
这个问题都准备好了,不需要再次回答,我什至看不到您和Ponies回答有什么不同?
–约书亚·达克斯伯里(Joshua Duxbury)
16 Sep 19'在10:12
@JoshuaDuxbury它提供了工作副本粘贴版本
– greg121
16 Sep 19'在10:59
#4 楼
我更喜欢只通过声明语句进行设置DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
#5 楼
如果查询返回多行,请使用TOP 1
。SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
评论
它实际上不会在SQL中引起错误,它会选择最后一条记录(尽管如果您使用此值并且它不正确,则可能在应用程序中导致结果错误)
– d219
18年4月30日在10:43
#6 楼
您可以使用它,但是请记住您的查询给出1个结果,多个结果将引发异常。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'
#7 楼
共有三种方法:DECLARE
SET-Microsoft建议的方法
SELECT
以下查询详细说明了每种方法的优缺点:
-- First way,
DECLARE @test int = (SELECT 1)
, @test2 int = (SELECT a from (values (1),(2)) t(a)) -- throws error
-- advantage: declare and set in the same place
-- Disadvantage: can be used only during declaration. cannot be used later
-- Second way
DECLARE @test int
, @test2 int
SET @test = (select 1)
SET @test2 = (SELECT a from (values (1),(2)) t(a)) -- throws error
-- Advantage: ANSI standard.
-- Disadvantage: cannot set more than one variable at a time
-- Third way
DECLARE @test int, @test2 int
SELECT @test = (select 1)
,@test2 = (SELECT a from (values (1),(2)) t(a)) -- throws error
-- Advantage: Can set more than one variable at a time
-- Disadvantage: Not ANSI standard
#8 楼
Select @ModelID =m.modelid
From MODELS m
Where m.areaid = 'South Coast'
在这种情况下,如果您返回两个或多个结果,那么您的结果就是最后一条记录。因此,请注意这一点,如果您可能还要返回两条记录,因为您可能看不到预期的结果。
#9 楼
要使用SQL ASSIGN变量选择最佳实践,如下所示->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;
如果必须在一行中分配多个变量,则可以使用同一SELECT INTO
->DECLARE val1 int;
->DECLARE val2 int;
->SELECT student__id,student_name INTO val1,val2 FROM student_details;
--HAPPY CODING--
评论
“最佳实践”-来源?
–罗德尼·埃利斯(Rodney Ellis)
5月27日4:38
如果您有多个要从表中选择的列,那么您可以使用单个SELECT INTO语句轻松分配它,而不用重复代码!
–Venkzz_venki
5月27日8:47
评论
分配变量时,SET与SELECT它是唯一标识符。不是uniqueidentifer。