Bagaimana cara mengatur variabel dari query SQL?


Jawaban:


519

Menggunakan SELECT:

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

Menggunakan SET:

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

Lihat pertanyaan ini untuk perbedaan antara menggunakan SELECT dan SET dalam TSQL .

Peringatan

Jika pernyataan pilih ini mengembalikan beberapa nilai (buruk untuk memulai):

  • Saat menggunakan SELECT, variabel diberi nilai terakhir yang dikembalikan (seperti yang dikatakan womp), tanpa kesalahan atau peringatan (ini dapat menyebabkan bug logika)
  • Saat menggunakan SET, kesalahan akan terjadi

3
Jika pernyataan pilih ini mengembalikan beberapa nilai: dalam kasus pertama, variabel ditetapkan nilai terakhir yang dikembalikan (seperti yang dikatakan womp), tanpa kesalahan atau peringatan (ini dapat menyebabkan bug logika); dalam kasus kedua, kesalahan akan terjadi.
Francis Niu

3
BTW, kasing yang menggunakan SET membutuhkan sepasang tanda kurung: SET @ModelID = (PILIH ...)
Francis Niu

2
Saya akan menggunakan TOP 1 dengan pilih, hanya memiliki 1 hasil, misalnya SET @ModelID = (PILIH TOP 1 m.modelid DARI MODEL m WHERE m.areaid = 'Pantai Selatan')
TPAKTOPA

Jika menggunakan set ketika beberapa nilai dikembalikan maka bagaimana menanganinya menggunakan penanganan pengecualian?
pelajar

Terkadang Anda menginginkan kesalahan jika ada hasil duplikat yang tidak terduga daripada diam-diam menggunakan hasil yang tidak terduga.
Denise Skidmore


29
declare @ModelID uniqueidentifer

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

select @ModelID

Pertanyaan ini semua siap memiliki jawaban yang tidak perlu dijawab lagi, saya bahkan tidak bisa melihat apa yang berbeda antara jawaban Anda dan kuda?
Joshua Duxbury

5
@ JoshuaDuxbury menyediakan versi copy paste yang
berfungsi

17

Saya lebih suka mengaturnya dari pernyataan pernyataan

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')

10

Gunakan TOP 1jika kueri mengembalikan beberapa baris.

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

Itu tidak akan benar-benar menyebabkan kesalahan dalam SQL itu akan memilih catatan terakhir (walaupun itu dapat menyebabkan kesalahan yang dihasilkan dalam aplikasi jika Anda menggunakan nilai ini dan itu salah)
d219

9

Anda dapat menggunakan ini, tetapi ingat bahwa kueri Anda memberikan 1 hasil, beberapa hasil akan membuang pengecualian.

declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')

Cara lain:

Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'

4
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'

Dalam hal ini jika Anda memiliki dua hasil atau lebih yang dikembalikan maka hasil Anda adalah catatan terakhir. Jadi waspadai ini jika Anda mungkin memiliki dua catatan lagi yang dikembalikan karena Anda mungkin tidak melihat hasil yang diharapkan.


4

Ada tiga pendekatan:

  1. MENYATAKAN
  2. SET - Pendekatan yang Disarankan Microsoft
  3. PILIH

Kueri di bawah ini merinci keuntungan dan kerugian masing-masing:

-- 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

1

Untuk ASSIGN variabel menggunakan SQL pilih praktik terbaik adalah seperti yang ditunjukkan di bawah ini

->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;

JIKA Anda harus menetapkan lebih dari satu variabel dalam satu baris, Anda dapat menggunakan SELECT INTO yang sama

->DECLARE val1 int;
->DECLARE val2 int;

->SELECT student__id,student_name INTO val1,val2 FROM student_details;

--HAPPY CODING-- 

"praktik terbaik" - sumber?
Rodney Ellis

JIKA Anda memiliki lebih dari satu kolom untuk dipilih dari Tabel maka Anda dapat dengan mudah menetapkannya menggunakan pernyataan SELECT INTO tunggal alih-alih mengulangi kode !!
Venkzz_venki
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.