DEKLARASIKAN @local_variable (SQL Bertransaksi)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Variabel dideklarasikan dalam isi batch atau prosedur dengan pernyataan DECLARE dan ditetapkan nilai dengan menggunakan pernyataan SET atau SELECT. Variabel kursor dapat dideklarasikan dengan pernyataan ini dan digunakan dengan pernyataan terkait kursor lainnya. Setelah deklarasi, semua variabel diinisialisasi sebagai NULL, kecuali nilai disediakan sebagai bagian dari deklarasi.

Topic link iconKonvensi Sintaksis T-SQL

Sintaks

-- Syntax for SQL Server and Azure SQL Database  
  
DECLARE   
{   
    { @local_variable [AS] data_type  [ = value ] }  
  | { @cursor_variable_name CURSOR }  
} [,...n]   
| { @table_variable_name [AS] <table_type_definition> }   
  
<table_type_definition> ::=   
     TABLE ( { <column_definition> | <table_constraint> } [ ,...n] )   
  
<column_definition> ::=   
     column_name { scalar_data_type | AS computed_column_expression }  
     [ COLLATE collation_name ]   
     [ [ DEFAULT constant_expression ] | IDENTITY [ (seed ,increment ) ] ]   
     [ ROWGUIDCOL ]   
     [ <column_constraint> ]   
  
<column_constraint> ::=   
     { [ NULL | NOT NULL ]   
     | [ PRIMARY KEY | UNIQUE ]   
     | CHECK ( logical_expression )   
     | WITH ( <index_option > )  
     }   
  
<table_constraint> ::=   
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n] )   
     | CHECK ( search_condition )   
     }   
  
<index_option> ::=  
See CREATE TABLE for index option syntax.  
  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
DECLARE   
{{ @local_variable [AS] data_type } [ =value [ COLLATE <collation_name> ] ] } [,...n]  
  

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

@local_variable
Adalah nama variabel. Nama variabel harus dimulai dengan tanda (@). Nama variabel lokal harus mematuhi aturan untuk pengidentifikasi.

data_type
Adalah jenis tabel yang ditentukan pengguna system-supplied, common language runtime (CLR), atau jenis data alias. Variabel tidak boleh dari jenis data teks, ntext, atau gambar .

Untuk informasi selengkapnya tentang jenis data sistem, lihat Jenis Data (SQL Transact). Untuk informasi selengkapnya tentang jenis yang ditentukan pengguna CLR atau jenis data alias, lihat CREATE TYPE (Transact-SQL).

=Nilai
Menetapkan nilai ke variabel dalam baris. Nilai dapat berupa konstanta atau ekspresi, tetapi harus cocok dengan jenis deklarasi variabel atau secara implisit dapat dikonversi ke jenis tersebut. Untuk informasi selengkapnya, lihat Ekspresi (transact-SQL).

@cursor_variable_name
Adalah nama variabel kursor. Nama variabel kursor harus dimulai dengan tanda at (@) dan sesuai dengan aturan untuk pengidentifikasi.

KURSOR
Menentukan bahwa variabel adalah variabel kursor lokal.

@table_variable_name
Adalah nama variabel tabel jenis. Nama variabel harus dimulai dengan tanda di (@) dan sesuai dengan aturan untuk pengidentifikasi.

<table_type_definition>
Menentukan jenis data tabel . Deklarasi tabel mencakup definisi kolom, nama, jenis data, dan batasan. Satu-satunya jenis batasan yang diizinkan adalah PRIMARY KEY, UNIQUE, NULL, dan CHECK. Tipe data alias tidak dapat digunakan sebagai tipe data skalar kolom jika aturan atau definisi default terikat dengan jenis tersebut.

<> table_type_definiton Adalah subset informasi yang digunakan untuk menentukan tabel di CREATE TABLE. Elemen dan definisi penting disertakan di sini. Untuk informasi selengkapnya, lihat CREATE TABLE (Transact-SQL).

n
Adalah tempat penampung yang menunjukkan bahwa beberapa variabel dapat ditentukan dan ditetapkan nilainya. Saat mendeklarasikan variabel tabel , variabel tabel harus menjadi satu-satunya variabel yang dideklarasikan dalam pernyataan DECLARE.

column_name
Adalah nama kolom dalam tabel.

scalar_data_type
Menentukan bahwa kolom adalah jenis data skalar.

computed_column_expression
Adalah ekspresi yang menentukan nilai kolom komputasi. Ini dihitung dari ekspresi menggunakan kolom lain dalam tabel yang sama. Misalnya, kolom komputasi dapat memiliki biaya definisi sebagai harga * qty. Ekspresi dapat berupa nama kolom, konstanta, fungsi bawaan, variabel, atau kombinasi apa pun yang disambungkan oleh satu atau beberapa operator. Ekspresi tidak boleh berupa subkueri atau fungsi yang ditentukan pengguna. Ekspresi tidak dapat mereferensikan jenis yang ditentukan pengguna CLR.

[SUSUN collation_name]
Menentukan kolagasi untuk kolom. collation_name dapat berupa nama kolase Windows atau nama kolase SQL, dan hanya berlaku untuk kolom jenis data karakter, varchar, teks, nchar, nvarchar, dan ntext. Jika tidak ditentukan, kolom ditetapkan baik kolase jenis data yang ditentukan pengguna (jika kolom adalah jenis data yang ditentukan pengguna) atau kolase database saat ini.

Untuk informasi selengkapnya tentang nama kolae Windows dan SQL, lihat COLLATE (Transact-SQL).

DEFAULT
Menentukan nilai yang disediakan untuk kolom ketika nilai tidak disediakan secara eksplisit selama penyisipan. Definisi DEFAULT dapat diterapkan ke kolom apa pun kecuali yang didefinisikan sebagai tanda waktu atau yang memiliki properti IDENTITY. Definisi DEFAULT dihapus saat tabel dihilangkan. Hanya nilai konstanta, seperti string karakter; fungsi sistem, seperti SYSTEM_USER(); atau NULL dapat digunakan sebagai default. Untuk mempertahankan kompatibilitas dengan versi SQL Server yang lebih lama, nama batasan dapat ditetapkan ke DEFAULT.

constant_expression
Adalah fungsi konstanta, NULL, atau sistem yang digunakan sebagai nilai default untuk kolom.

IDENTITAS
Menunjukkan bahwa kolom baru adalah kolom identitas. Saat baris baru ditambahkan ke tabel, SQL Server menyediakan nilai inkremental unik untuk kolom tersebut. Kolom identitas umumnya digunakan bersama dengan batasan PRIMARY KEY untuk berfungsi sebagai pengidentifikasi baris unik untuk tabel. Properti IDENTITY dapat ditetapkan ke kolom tinyint, smallint, int, decimal(p,0), atau numerik(p,0). Hanya satu kolom identitas yang dapat dibuat per tabel. Default terikat dan batasan DEFAULT tidak dapat digunakan dengan kolom identitas. Anda harus menentukan nilai awal dan kenaikan, atau tidak keduanya. Jika tidak ditentukan, defaultnya adalah (1,1).

Nilai awal
Adalah nilai yang digunakan untuk baris pertama yang dimuat ke dalam tabel.

Kenaikan
Adalah nilai inkremental yang ditambahkan ke nilai identitas baris sebelumnya yang dimuat.

ROWGUIDCOL
Menunjukkan bahwa kolom baru adalah kolom pengidentifikasi unik global baris. Hanya satu kolom pengidentifikasi unik per tabel yang dapat ditetapkan sebagai kolom ROWGUIDCOL. Properti ROWGUIDCOL hanya dapat ditetapkan ke kolom pengidentifikasi unik .

| NULL NOT NULL
Menunjukkan apakah null diizinkan dalam variabel . Defaultnya adalah NULL.

KUNCI PRIMER
Adalah batasan yang memberlakukan integritas entitas untuk kolom atau kolom tertentu melalui indeks unik. Hanya satu batasan KUNCI PRIMER yang dapat dibuat per tabel.

UNIQUE
Adalah batasan yang menyediakan integritas entitas untuk kolom atau kolom tertentu melalui indeks unik. Tabel dapat memiliki beberapa batasan UNIK.

CHECK
Adalah batasan yang memberlakukan integritas domain dengan membatasi kemungkinan nilai yang dapat dimasukkan ke dalam kolom atau kolom.

logical_expression
Adalah ekspresi logika yang mengembalikan TRUE atau FALSE.

Keterangan

Variabel sering digunakan dalam batch atau prosedur sebagai penghitung untuk WHILE, LOOP, atau untuk IF... Blok ELSE.

Variabel hanya dapat digunakan dalam ekspresi, bukan sebagai pengganti nama objek atau kata kunci. Untuk membuat pernyataan SQL dinamis, gunakan EXECUTE.

Cakupan variabel lokal adalah batch tempat variabel dideklarasikan.

Variabel tabel belum tentu merupakan residen memori. Di bawah tekanan memori, halaman milik variabel tabel dapat didorong ke tempdb.

Variabel kursor yang saat ini memiliki kursor yang ditetapkan untuknya dapat direferensikan sebagai sumber dalam:

  • Pernyataan CLOSE.

  • Pernyataan DEALLOCATE.

  • Pernyataan FETCH.

  • Pernyataan OPEN.

  • Pernyataan DELETE atau UPDATE yang diposisikan.

  • ATUR pernyataan variabel CURSOR (di sisi kanan).

Dalam semua pernyataan ini, SQL Server menimbulkan kesalahan jika variabel kursor yang dirujuk ada tetapi tidak memiliki kursor yang saat ini dialokasikan untuk itu. Jika variabel kursor yang direferensikan tidak ada, SQL Server menimbulkan kesalahan yang sama yang dimunculkan untuk variabel yang tidak dinyatakan dari jenis lain.

Variabel kursor:

  • Dapat menjadi target jenis kursor atau variabel kursor lainnya. Untuk informasi selengkapnya, lihat SET @local_variable (Transact-SQL).

  • Dapat direferensikan sebagai target parameter kursor output dalam pernyataan EXECUTE jika variabel kursor tidak memiliki kursor yang saat ini ditetapkan untuknya.

  • Harus dianggap sebagai penunjuk ke kursor.

Contoh

A. Menggunakan DECLARE

Contoh berikut menggunakan variabel lokal bernama @find untuk mengambil informasi kontak untuk semua nama belakang yang dimulai dengan Man.

USE AdventureWorks2012;  
GO  
DECLARE @find VARCHAR(30);   
/* Also allowed:   
DECLARE @find VARCHAR(30) = 'Man%';   
*/  
SET @find = 'Man%';   
SELECT p.LastName, p.FirstName, ph.PhoneNumber  
FROM Person.Person AS p   
JOIN Person.PersonPhone AS ph ON p.BusinessEntityID = ph.BusinessEntityID  
WHERE LastName LIKE @find;  

Berikut adalah tataan hasil.

LastName            FirstName               Phone
------------------- ----------------------- -------------------------
Manchepalli         Ajay                    1 (11) 500 555-0174
Manek               Parul                   1 (11) 500 555-0146
Manzanares          Tomas                   1 (11) 500 555-0178
 
(3 row(s) affected)

B. Menggunakan DECLARE dengan dua variabel

Contoh berikut mengambil nama perwakilan penjualan Adventure Works Cycles yang terletak di wilayah penjualan Amerika Utara dan memiliki setidaknya $ 2.000.000 penjualan untuk tahun itu.

USE AdventureWorks2012;  
GO  
SET NOCOUNT ON;  
GO  
DECLARE @Group nvarchar(50), @Sales MONEY;  
SET @Group = N'North America';  
SET @Sales = 2000000;  
SET NOCOUNT OFF;  
SELECT FirstName, LastName, SalesYTD  
FROM Sales.vSalesPerson  
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;  

C. Mendeklarasikan variabel tabel tipe

Contoh berikut membuat table variabel yang menyimpan nilai yang ditentukan dalam klausa OUTPUT dari pernyataan UPDATE. Dua SELECT pernyataan mengikuti yang mengembalikan nilai di @MyTableVar dan hasil operasi pembaruan dalam Employee tabel. Perhatikan bahwa hasil dalam INSERTED.ModifiedDate kolom berbeda dari nilai dalam ModifiedDate kolom dalam Employee tabel. Ini karena pemicu AFTER UPDATE , yang memperbarui nilai ModifiedDate ke tanggal saat ini, ditentukan pada Employee tabel. Namun, kolom yang dikembalikan dari OUTPUT mencerminkan data sebelum pemicu diaktifkan. Untuk informasi selengkapnya, lihat Klausul OUTPUT (SQL Transact).

USE AdventureWorks2012;  
GO  
DECLARE @MyTableVar TABLE(  
    EmpID INT NOT NULL,  
    OldVacationHours INT,  
    NewVacationHours INT,  
    ModifiedDate DATETIME);  
UPDATE TOP (10) HumanResources.Employee  
SET VacationHours = VacationHours * 1.25   
OUTPUT INSERTED.BusinessEntityID,  
       DELETED.VacationHours,  
       INSERTED.VacationHours,  
       INSERTED.ModifiedDate  
INTO @MyTableVar;  
--Display the result set of the table variable.  
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate  
FROM @MyTableVar;  
GO  
--Display the result set of the table.  
--Note that ModifiedDate reflects the value generated by an  
--AFTER UPDATE trigger.  
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate  
FROM HumanResources.Employee;  
GO  

D. Mendeklarasikan variabel jenis tabel yang ditentukan pengguna

Contoh berikut membuat parameter bernilai tabel atau variabel tabel yang disebut @LocationTVP. Ini memerlukan jenis tabel yang ditentukan pengguna yang sesuai yang disebut LocationTableType. Untuk informasi selengkapnya tentang cara membuat jenis tabel yang ditentukan pengguna, lihat CREATE TYPE (Transact-SQL). Untuk informasi selengkapnya tentang parameter bernilai tabel, lihat Menggunakan Parameter Table-Valued (Mesin Database).

DECLARE @LocationTVP   
AS LocationTableType;  

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

E. Menggunakan DECLARE

Contoh berikut menggunakan variabel lokal bernama @find untuk mengambil informasi kontak untuk semua nama belakang yang dimulai dengan Walt.

-- Uses AdventureWorks  
  
DECLARE @find VARCHAR(30);  
/* Also allowed:   
DECLARE @find VARCHAR(30) = 'Man%';  
*/  
SET @find = 'Walt%';  
  
SELECT LastName, FirstName, Phone  
FROM DimEmployee   
WHERE LastName LIKE @find;  

F. Menggunakan DECLARE dengan dua variabel

Contoh berikut mengambil menggunakan variabel untuk menentukan nama depan dan belakang karyawan dalam DimEmployee tabel.

-- Uses AdventureWorks  
  
DECLARE @lastName VARCHAR(30), @firstName VARCHAR(30);  
  
SET @lastName = 'Walt%';  
SET @firstName = 'Bryan';  
  
SELECT LastName, FirstName, Phone  
FROM DimEmployee   
WHERE LastName LIKE @lastName AND FirstName LIKE @firstName;  

Lihat juga

EXECUTE (Transact-SQL)
Fungsi Bawaan (SQL Transact)
SELECT (Transact-SQL)
tabel (SQL Transact)
Bandingkan XML Bertipe dengan XML Yang Tidak Dititik