回答:
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')
TSQLでのSELECTとSETの違いについては、この質問を参照してください。
このselectステートメントが複数の値を返す場合(そもそも悪い):
SELECT
と、変数には、エラーや警告なしに(wompが言ったように)返される最後の値が割り当てられます(これにより、論理バグが発生する可能性があります)。SET
するとエラーが発生しますSELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
selectステートメントが複数の値を返す場合、変数には最後に返された値が割り当てられます。
変数でのSELECTの使用に関する参照:http : //msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
declareステートメントから設定するだけです
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
これを使用することはできますが、クエリが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'
Select @ModelID =m.modelid
From MODELS m
Where m.areaid = 'South Coast'
この場合、2つ以上の結果が返されると、結果は最後のレコードになります。したがって、予期した結果が表示されない可能性があるため、さらに2つのレコードが返される場合があることに注意してください。
3つのアプローチがあります。
以下のクエリは、それぞれの長所と短所を詳しく示しています。
-- 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
->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--