Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Database Azure
SQLInstans
Terkelola Azure SQLAzure Synapse Analytics
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengatur variabel lokal ke nilai ekspresi.
Untuk menetapkan variabel, gunakan SET @local_variable alih-alih SELECT @local_variable.
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ , ...n ] [ ; ]
Arguments
@local_variable
Variabel yang dideklarasikan yang Anda tetapkan nilainya.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Tetapkan nilai di sebelah kanan ke variabel di sebelah kiri.
Operator penetapan gabungan:
| Operator | Action |
|---|---|
| = | Menetapkan ekspresi yang mengikuti, ke variabel . |
| += | Menambahkan dan menetapkan |
| -= | Mengurangi dan menetapkan |
| *= | Mengalikan dan menetapkan |
| /= | Membagi dan menetapkan |
| %= | Modulo dan tetapkan |
| &= | Bitwise AND dan tetapkan |
| ^= | Bitwise XOR dan tetapkan |
| |= | Bitwise OR dan tetapkan |
expression
Ekspresi apa pun yang valid. Istilah ini mencakup subkueri skalar.
Remarks
Gunakan SELECT @local_variable untuk mengembalikan satu nilai ke dalam variabel. Namun, ketika ekspresi adalah nama kolom, ekspresi dapat mengembalikan beberapa nilai.
SELECT Jika pernyataan mengembalikan lebih dari satu nilai, variabel mendapatkan nilai terakhir yang dikembalikan kueri.
SELECT Jika pernyataan tidak mengembalikan baris, variabel menyimpan nilainya saat ini. Jika ekspresi adalah subkueri skalar yang tidak mengembalikan nilai, variabel diatur ke NULL.
Satu SELECT pernyataan dapat menginisialisasi beberapa variabel lokal.
Note
Anda tidak dapat menggunakan SELECT pernyataan yang berisi penetapan variabel untuk juga melakukan operasi pengambilan tataan hasil yang khas.
Examples
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
Database AdventureWorksLT digunakan sebagai database sampel untuk Azure SQL Database.
A. Gunakan SELECT @local_variable untuk mengembalikan satu nilai
Dalam contoh berikut, variabel @var1 mendapatkan nilai 'Generic Name'. Kueri terhadap Store tabel tidak mengembalikan baris karena nilai yang ditentukan CustomerID tidak ada dalam tabel. Variabel menyimpan nilai "Nama Generik".
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
SELECT @var1 AS 'ProductName';
Berikut set hasilnya.
ProductName
------------------------------
Generic Name
B. Gunakan SELECT @local_variable untuk mengembalikan null
Dalam contoh berikut, subkueri menetapkan nilai ke @var1. Karena nilai yang diminta CustomerID tidak ada, subkueri tidak mengembalikan nilai, dan variabel diatur ke NULL.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
SELECT @var1 AS 'Company Name';
Berikut set hasilnya.
Company Name
----------------------------
NULL
C. Penggunaan antipattern dari penetapan variabel rekursif
Hindari pola berikut untuk penggunaan variabel dan ekspresi rekursif:
SELECT @Var = <expression containing @Var>
FROM
...
Dalam hal ini, tidak dijamin bahwa @Var diperbarui berdasarkan baris demi baris. Misalnya, @Var mungkin diatur ke nilai @Var awal untuk semua baris. Perilaku ini terjadi karena urutan dan frekuensi di mana penugasan diproses tidak menentukan. Aturan ini berlaku untuk ekspresi yang berisi perangkaian string variabel, seperti yang ditunjukkan dalam contoh berikut, tetapi juga untuk ekspresi dengan variabel non-string atau += operator gaya. Gunakan fungsi agregasi sebagai gantinya untuk operasi berbasis set alih-alih operasi baris demi baris.
Untuk perangkaian string, pertimbangkan fungsi STRING_AGG, yang diperkenalkan pada SQL Server 2017 (14.x), untuk skenario di mana perangkaian string yang diurutkan diinginkan. Untuk informasi selengkapnya, lihat STRING_AGG.
Contoh berikut menunjukkan antipattern yang harus dihindari. Menggunakan ORDER BY dalam upaya untuk mengurutkan perangkaian menyebabkan daftar tidak lengkap:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = CONCAT(COALESCE (@List + ', ', ''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;
SELECT @List;
Berikut set hasilnya.
(No column name)
---
Walker
Sebagai gantinya, pertimbangkan:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = STRING_AGG(p.LastName, ', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';
SELECT @List;
Berikut set hasilnya.
(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker