DEKLARASIKAN @local_variable (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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.
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
