ฉันพยายามตั้งค่าตัวแปรจากแบบสอบถาม SQL:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = 'South Coast'
เห็นได้ชัดว่าฉันไม่ได้ทำถูกต้องเพราะไม่ได้ผล ใครบางคนสามารถแนะนำวิธีแก้ปัญหาได้หรือไม่?
ขอบคุณ!
ฉันพยายามตั้งค่าตัวแปรจากแบบสอบถาม SQL:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where 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 และตั้งอยู่ใน TSQL
หากคำสั่ง 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 @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
ใช้TOP 1
ถ้าแบบสอบถามส่งคืนหลายแถว
SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.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'
ในกรณีนี้ถ้าคุณมีผลลัพธ์สองรายการขึ้นไปผลลัพธ์ของคุณคือระเบียนสุดท้าย ดังนั้นโปรดระวังสิ่งนี้หากคุณอาจมีการบันทึกอีกสองรายการเนื่องจากคุณอาจไม่เห็นผลลัพธ์ที่คาดหวัง
มีสามวิธีคือ
รายละเอียดแบบสอบถามด้านล่างนี้มีข้อดีและข้อเสียของแต่ละข้อ:
-- 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--