Bagikan melalui


Variabel (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Titik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

Variabel lokal Transact-SQL adalah objek yang dapat menyimpan satu nilai data dari jenis tertentu. Anda biasanya menggunakan variabel dalam batch dan skrip untuk tujuan berikut:

  • Gunakan variabel sebagai penghitung untuk menghitung berapa kali perulangan dilakukan, atau untuk mengontrol berapa kali perulangan dilakukan.
  • Tahan nilai data untuk diuji oleh pernyataan kontrol aliran.
  • Simpan nilai data untuk dikembalikan oleh kode pengembalian prosedur tersimpan atau nilai pengembalian fungsi.

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.

Remarks

Nama beberapa fungsi sistem Transact-SQL dimulai dengan dua tanda (@@). Meskipun versi SQL Server yang lebih lama mengacu pada @@ fungsi sebagai variabel global, @@ fungsi bukan variabel, dan tidak memiliki perilaku yang sama dengan variabel. Fungsinya @@ adalah fungsi sistem, dan penggunaan sintaksnya mengikuti aturan untuk fungsi.

Anda tidak dapat menggunakan variabel dalam tampilan.

Perubahan pada variabel tidak terpengaruh oleh pembatalan transaksi.

Mendeklarasikan variabel Transact-SQL

DECLARE Gunakan pernyataan untuk menginisialisasi variabel Transact-SQL dengan:

  • Menetapkan nama. Nama harus dimulai dengan satu @ karakter.

  • Menetapkan jenis data yang disediakan sistem atau ditentukan pengguna dan panjangnya. Untuk variabel numerik, Anda dapat menetapkan skala presisi dan opsional. Untuk variabel jenis XML, Anda dapat secara opsional menetapkan koleksi skema.

  • Mengatur nilai ke NULL.

Misalnya, pernyataan berikut DECLARE membuat variabel lokal bernama @mycounter dengan jenis data int . Secara default, nilai untuk variabel ini adalah NULL.

DECLARE @MyCounter AS INT;

Untuk mendeklarasikan lebih dari satu variabel lokal, gunakan koma setelah definisi variabel lokal pertama, lalu tentukan nama variabel lokal dan jenis data berikutnya.

Misalnya, pernyataan berikut DECLARE membuat tiga variabel lokal bernama @LastName, , @FirstNamedan @StateProvince, dan menginisialisasi masing-masing ke NULL:

DECLARE @LastName AS NVARCHAR (30),
        @FirstName AS NVARCHAR (20),
        @StateProvince AS NCHAR (2);

Dalam contoh lain, pernyataan berikut DECLARE membuat variabel Boolean yang disebut @IsActive, yang dinyatakan sebagai bit dengan nilai 0 (false):

DECLARE @IsActive AS BIT = 0;

Cakupan variabel

Cakupan variabel adalah rentang pernyataan Transact-SQL yang dapat mereferensikan variabel. Cakupan variabel berlangsung dari titik yang dinyatakan hingga akhir batch atau prosedur tersimpan di mana variabel dideklarasikan. Misalnya, skrip berikut menghasilkan kesalahan sintaks karena variabel dideklarasikan dalam satu batch (dipisahkan oleh GO kata kunci) dan direferensikan di yang lain:

USE AdventureWorks2025;
GO

DECLARE @MyVariable AS INT;
SET @MyVariable = 1;

SELECT BusinessEntityID,
       NationalIDNumber,
       JobTitle
FROM HumanResources.Employee
WHERE BusinessEntityID = @MyVariable;

Variabel memiliki cakupan lokal dan hanya terlihat dalam batch atau prosedur tempat Anda menentukannya. Dalam contoh berikut, cakupan berlapis yang dibuat untuk eksekusi sp_executesql tidak memiliki akses ke variabel yang dideklarasikan dalam cakupan yang lebih tinggi dan mengembalikan kesalahan.

DECLARE @MyVariable AS INT;
SET @MyVariable = 1;

EXECUTE sp_executesql N'SELECT @MyVariable';

Kueri ini menghasilkan kesalahan berikut:

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@MyVariable".

Mengatur nilai dalam variabel Transact-SQL

Ketika Anda pertama kali mendeklarasikan variabel, nilainya adalah NULL. Untuk menetapkan nilai ke variabel, gunakan SET pernyataan . Metode ini adalah cara yang disukai untuk menetapkan nilai ke variabel. Anda juga dapat menetapkan nilai ke variabel dengan merujuknya dalam daftar pernyataan yang SELECT dipilih.

Untuk menetapkan variabel nilai dengan menggunakan SET pernyataan, sertakan nama variabel dan nilai yang akan ditetapkan ke variabel. Metode ini adalah cara yang disukai untuk menetapkan nilai ke variabel. Batch berikut, misalnya, mendeklarasikan dua variabel, menetapkan nilai kepada mereka, lalu menggunakannya dalam WHERE klausul SELECT pernyataan:

USE AdventureWorks2025;
GO

-- Declare two variables.
DECLARE @FirstNameVariable AS NVARCHAR (50),
        @PostalCodeVariable AS NVARCHAR (15);

-- Set their values.
SET @FirstNameVariable = N'Amy';
SET @PostalCodeVariable = N'BA5 3HX';

-- Use them in the WHERE clause of a SELECT statement.
SELECT LastName,
       FirstName,
       JobTitle,
       City,
       PostalCode,
       StateProvinceName,
       CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
      OR PostalCode = @PostalCodeVariable;

Anda juga dapat menetapkan nilai ke variabel dengan mereferensikannya dalam daftar pilih. Jika Anda mereferensikan variabel dalam daftar pilih, tetapkan nilai skalar atau pastikan SELECT pernyataan hanya mengembalikan satu baris. Contohnya:

USE AdventureWorks2025;
GO

DECLARE @EmpIDVariable AS INT;

SELECT @EmpIDVariable = MAX(BusinessEntityID)
FROM HumanResources.Employee;

Warning

Jika ada beberapa klausa penugasan dalam satu SELECT pernyataan, Mesin Database tidak menjamin urutan evaluasi ekspresi. Efek hanya terlihat jika ada referensi di antara penugasan.

SELECT Jika pernyataan mengembalikan lebih dari satu baris dan variabel mereferensikan ekspresi nonskala, variabel diatur ke nilai yang dikembalikan untuk ekspresi di baris terakhir dari tataan hasil. Misalnya, dalam batch @EmpIDVariable berikut diatur ke BusinessEntityID nilai baris terakhir yang dikembalikan, yaitu 1:

USE AdventureWorks2025;
GO

DECLARE @EmpIDVariable AS INT;

SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;

SELECT @EmpIDVariable;

Examples

Skrip berikut membuat tabel pengujian kecil dan mengisinya dengan 26 baris. Skrip menggunakan variabel untuk melakukan tiga hal:

  • Kontrol berapa banyak baris yang disisipkan dengan mengontrol berapa kali perulangan dijalankan.
  • Berikan nilai yang disisipkan ke dalam kolom bilangan bulat.
  • Fungsi sebagai bagian dari ekspresi yang menghasilkan huruf untuk disisipkan ke dalam kolom karakter.
-- Create the table.
CREATE TABLE TestTable
(
    cola INT,
    colb CHAR (3)
);

SET NOCOUNT ON;

-- Declare the variable to be used.
DECLARE @MyCounter AS INT;

-- Initialize the variable.
SET @MyCounter = 0;

-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
    -- Insert a row into the table.
    BEGIN
        INSERT INTO TestTable
        -- Use the variable to provide the integer value
        -- for cola. Also use it to generate a unique letter
        -- for each row. Use the ASCII function to get the
        -- integer value of 'a'. Add @MyCounter. Use CHAR to
        -- convert the sum back to the character @MyCounter
        -- characters after 'a'.
        VALUES (
            @MyCounter,
            CHAR((@MyCounter + ASCII('a')))
        );
        -- Increment the variable to count this iteration
        -- of the loop.
        SET @MyCounter = @MyCounter + 1;
    END
SET NOCOUNT OFF;

-- View the data.
SELECT cola,
       colb
FROM TestTable;
DROP TABLE TestTable;