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
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Database SQL di Microsoft Fabric
Utilitas sqlcmd memungkinkan Anda memasukkan pernyataan Transact-SQL, prosedur sistem, dan file skrip.
Note
Untuk mengetahui varian dan versi sqlcmd mana yang diinstal pada sistem Anda, lihat Memeriksa versi utilitas sqlcmd yang diinstal. Untuk informasi tentang cara mendapatkan sqlcmd, lihat Mengunduh dan menginstal utilitas sqlcmd.
Variabel pembuatan skrip dalam sqlcmd
Variabel yang digunakan dalam skrip disebut variabel pembuatan skrip. Variabel pembuatan skrip memungkinkan satu skrip digunakan dalam beberapa skenario. Misalnya, jika Anda ingin menjalankan satu skrip terhadap beberapa server, alih-alih memodifikasi skrip untuk setiap server, Anda dapat menggunakan variabel pembuatan skrip untuk nama server. Dengan mengubah nama server yang disediakan ke variabel pembuatan skrip, skrip yang sama dapat dijalankan di server yang berbeda.
Variabel pembuatan skrip dapat didefinisikan secara eksplisit dengan menggunakan setvar perintah , atau secara implisit dengan menggunakan sqlcmd -v opsi .
Artikel ini juga menyertakan contoh yang menentukan variabel lingkungan di baris perintah dengan menggunakan SET.
Mengatur variabel pembuatan skrip dengan perintah setvar
Perintah setvar menentukan variabel pembuatan skrip. Variabel yang ditentukan dengan menggunakan setvar perintah disimpan secara internal. Variabel pembuatan skrip tidak boleh dikacaukan dengan variabel lingkungan yang ditentukan pada prompt perintah dengan menggunakan SET. Jika skrip mereferensikan variabel yang bukan variabel lingkungan atau tidak ditentukan dengan menggunakan setvar, pesan kesalahan dikembalikan dan eksekusi skrip berhenti. Untuk informasi selengkapnya, lihat -b opsi di sqlcmd.
Prioritas variabel (rendah hingga tinggi)
Jika lebih dari satu jenis variabel memiliki nama yang sama, variabel dengan prioritas tertinggi digunakan.
- Variabel lingkungan tingkat sistem
- Variabel lingkungan tingkat pengguna
- Shell perintah (
SET X=Y) diatur pada prompt perintah sebelum memulai sqlcmd sqlcmd -v X=Y:Setvar X Y
Note
Untuk melihat variabel lingkungan pada Windows 11, buka Pengaturan, lalu navigasi ke Tentang Sistem>, dan pilih tautan Pengaturan sistem tingkat lanjut. Di jendela Properti Sistem, pilih Variabel Lingkungan. Di Linux, ketik printenv di baris perintah, dan di macOS, ketik env.
Mengatur variabel skrip secara implisit
Saat Anda memulai sqlcmd dengan opsi yang memiliki variabel sqlcmd terkait, variabel sqlcmd diatur secara implisit ke nilai yang ditentukan dengan menggunakan opsi . Dalam contoh berikut, sqlcmd dimulai dengan opsi -l. Ini mengatur variabel SQLLOGINTIMEOUT secara implisit.
sqlcmd -l 60
Anda juga dapat menggunakan -v opsi untuk mengatur variabel pembuatan skrip yang ada dalam skrip. Dalam skrip berikut (nama file adalah testscript.sql), ColumnName adalah variabel pembuatan skrip.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Anda kemudian dapat menentukan nama kolom yang ingin Anda kembalikan dengan menggunakan -v opsi :
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Untuk mengembalikan kolom yang berbeda dengan menggunakan skrip yang sama, ubah nilai ColumnName variabel pembuatan skrip.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Panduan untuk membuat skrip nama dan nilai variabel
Pertimbangkan panduan berikut saat Anda memberi nama variabel pembuatan skrip:
Nama variabel tidak boleh berisi karakter spasi kosong atau tanda kutip.
Nama variabel tidak boleh memiliki formulir yang sama dengan ekspresi variabel, seperti $(var).
Variabel skrip tidak membedakan huruf besar/kecil
Note
Jika tidak ada nilai yang ditetapkan ke variabel lingkungan sqlcmd , variabel akan dihapus. Menggunakan
:setvar VarNametanpa nilai akan menghapus variabel.
Pertimbangkan panduan berikut saat Anda menentukan nilai untuk variabel pembuatan skrip:
- Nilai variabel yang ditentukan dengan menggunakan
setvaratau-vopsi harus diapit oleh tanda kutip jika nilai string berisi spasi. - Jika tanda kutip merupakan bagian dari nilai variabel, tanda kutip tersebut harus di-escape. Misalnya: :
setvar MyVar "spac""e".
Panduan mengenai nilai dan nama variabel pada cmd.exe SET
Variabel yang ditentukan dengan menggunakan SET adalah bagian dari lingkungan cmd.exe dan dapat dirujuk oleh sqlcmd. Pertimbangkan panduan berikut:
- Nama variabel tidak boleh berisi karakter spasi kosong atau tanda kutip.
- Nilai variabel mungkin berisi spasi atau tanda kutip.
variabel pembuatan skrip sqlcmd
| Variable | Opsi terkait | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (detik) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = tunggu tanpa batas waktu |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = tidak terbatas |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD dan SQLCMDSERVER diatur saat :Connect digunakan.
2 R menunjukkan nilai hanya dapat diatur satu kali selama inisialisasi program.
3 R/W menunjukkan bahwa nilai dapat direset dengan menggunakan setvar perintah dan perintah berikutnya menggunakan nilai baru.
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.
A. Menggunakan perintah setvar dalam skrip
Banyak opsi sqlcmd dapat dikontrol dalam skrip dengan menggunakan perintah setvar . Dalam contoh berikut, skrip test.sql dibuat di mana SQLCMDLOGINTIMEOUT variabel diatur ke 60 detik dan variabel skrip lainnya, server, diatur ke testserver. Kode berikut ada di test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Skrip kemudian dipanggil dengan menggunakan sqlcmd:
sqlcmd -i c:\test.sql
B. Gunakan perintah setvar secara interaktif
Contoh berikut menunjukkan cara mengatur variabel pembuatan skrip secara interaktif dengan menggunakan setvar perintah .
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Berikut hasilnya.
Changed database context to 'AdventureWorks2022'
1>
C. Menggunakan variabel lingkungan dari command prompt dalam sqlcmd
Dalam contoh berikut, empat variabel are lingkungan diatur lalu dipanggil dari sqlcmd.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Menggunakan variabel lingkungan tingkat pengguna dalam sqlcmd
Dalam contoh berikut, variabel lingkungan tingkat pengguna disetel di prompt perintah dan diteruskan ke file input %Temp%. Untuk mendapatkan variabel lingkungan tingkat pengguna, di Panel Kontrol, klik dua kali Sistem. Pilih tab Lanjutan , lalu pilih Variabel Lingkungan.
Kode berikut ada dalam file C:\testscript.txtinput :
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Kode berikut dimasukkan di prompt perintah:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Hasil berikut dikirim ke file C:\Documents and Settings\<user>\Local Settings\Temp\output.txtoutput .
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Gunakan skrip startup
Skrip startup sqlcmd dijalankan saat sqlcmd dimulai. Contoh berikut mengatur variabel lingkungan SQLCMDINI. Ini adalah isi dari init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Pemanggilan file init.sql ini terjadi ketika sqlcmd dimulai.
SET sqlcmdini=c:\init.sql
sqlcmd
Ini adalah keluaran.
1> <user> is connected to <server> (9.00.2047.00)
Note
Opsi -X menonaktifkan fitur skrip startup.
F. Ekspansi variabel
Contoh berikut menunjukkan bekerja dengan data dalam bentuk variabel sqlcmd .
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Sisipkan satu baris ke dalam Col1dbo.VariableTest yang berisi nilai $(tablename).
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
Pada prompt sqlcmd, ketika tidak ada variabel yang diatur sama dengan $(tablename), pernyataan berikut mengembalikan baris dan juga mengembalikan pesan "'tablename' variabel scripting tidak didefinisikan." Secara default, flag sqlcmd-b tidak diatur. Jika -b diatur, sqlcmd akan berakhir setelah kesalahan "variabel tidak ditentukan".
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Berikut hasilnya.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Karena variabel MyVar diatur ke $(tablename).
6> :setvar MyVar $(tablename)
Pernyataan ini mengembalikan baris dan juga mengembalikan pesan "'tablename' variabel skrip tidak ditentukan."
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Pernyataan ini mengembalikan baris data.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Konten terkait
- Pelajari selengkapnya tentang utilitas sqlcmd (Go) di GitHub
- Panduan Cepat: Jalankan image kontainer SQL Server Linux dengan Docker
- Memulai utilitas sqlcmd
- Jalankan T-SQL dari file skrip dengan sqlcmd
- menggunakan utilitas
- Menggunakan sqlcmd dengan variabel pembuatan skrip
- Menyambungkan ke SQL Server dengan sqlcmd
- Edit Skrip SQLCMD dengan Editor Kueri
- Mengelola Langkah-langkah Pekerjaan
- Membuat Tahap Tugas CmdExec