Mr *_*ket 296 sql t-sql sql-server
我正在尝试从SQL查询中设置变量:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
显然我没有这样做,因为它不起作用.有人可以提出解决方案吗?
谢谢!
OMG*_*ies 483
SELECT @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
SET @ModelID = (SELECT m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast')
Run Code Online (Sandbox Code Playgroud)
有关在TSQL中使用SELECT和SET之间的区别,请参阅此问题.
如果此select语句返回多个值(开头不好):
SELECT
,变量被赋予最后返回的值(如womp所述),没有任何错误或警告(这可能导致逻辑错误)SET
,将发生错误wom*_*omp 32
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
如果您的select语句返回多个值,则会为您的变量分配返回的最后一个值.
有关对变量使用SELECT的参考:http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx
gre*_*121 26
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
Run Code Online (Sandbox Code Playgroud)
Jos*_*ury 12
我更喜欢从declare语句中设置它
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
Run Code Online (Sandbox Code Playgroud)
man*_*jay 10
TOP 1
如果查询返回多行,请使用.
SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
有以下三种方法:
下面的查询详细说明了每种方法的优缺点:
-- 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
Run Code Online (Sandbox Code Playgroud)
Select @ModelID =m.modelid
From MODELS m
Where m.areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果返回两个或多个结果,则您的结果是最后一条记录。因此,如果您可能会返回另外两条记录,请注意这一点,因为您可能看不到预期结果。
->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;
Run Code Online (Sandbox Code Playgroud)
->DECLARE val1 int;
->DECLARE val2 int;
->SELECT student__id,student_name INTO val1,val2 FROM student_details;
--HAPPY CODING--
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用它,但是请记住您的查询给出1个结果,多个结果将引发异常。
declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
Run Code Online (Sandbox Code Playgroud)
其它的办法:
Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)