我试图从一个SQL查询设置一个变量:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'

很明显,我做得不对,因为它不起作用。谁能提出一个解决方案?

谢谢!


当前回答

declare @ModelID uniqueidentifer

--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')

select @ModelID

其他回答

如果查询返回多行,则使用TOP 1。

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

使用选择

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

使用设置

SET @ModelID = (SELECT m.modelid 
                  FROM MODELS m
                 WHERE m.areaid = 'South Coast');

然后,您可以使用SELECT来显示@ModelID的值,或者在代码中使用该变量。

SELECT @ModelID

请参阅此问题了解在TSQL中使用SELECT和SET的区别。

警告

如果SELECT语句返回多个值(开头就不好):

当使用SELECT时,变量被赋给返回的最后一个值(正如womp所说),没有任何错误或警告(这可能会导致逻辑错误) SET查询只有在查询结尾没有使用分号时才会返回错误

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

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'

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

SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

如果您的选择语句返回多个值,则您的变量将被分配返回的最后一个值。

关于对变量使用SELECT的参考:http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx