sqlcmd - Gunakan dengan variabel pembuatan skrip
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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 perintah setvar , atau secara implisit dengan menggunakan sqlcmd -v
opsi .
Artikel ini juga menyertakan contoh yang menentukan variabel lingkungan di prompt perintah Cmd.exe dengan menggunakan SET
.
Mengatur variabel pembuatan skrip dengan perintah setvar
Perintah setvar digunakan untuk menentukan variabel pembuatan skrip. Variabel yang ditentukan dengan menggunakan perintah setvar 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
Catatan
Untuk melihat variabel lingkungan, di Panel Kontrol, buka Sistem, lalu pilih tab Tingkat Lanjut.
Mengatur variabel pembuatan 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 -l
opsi . Ini secara implisit SQLLOGINTIMEOUT
mengatur variabel.
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 pembuatan skrip tidak peka huruf besar/kecil
Catatan
Jika tidak ada nilai yang ditetapkan ke variabel lingkungan sqlcmd , variabel akan dihapus. Menggunakan
:setvar VarName
tanpa nilai akan menghapus variabel.
Pertimbangkan panduan berikut saat Anda menentukan nilai untuk variabel pembuatan skrip:
- Nilai variabel yang ditentukan dengan menggunakan setvar atau
-v
opsi harus diapit oleh tanda kutip jika nilai string berisi spasi. - Jika tanda kutip adalah bagian dari nilai variabel, tanda kutip harus diloloskan. Misalnya: :
setvar MyVar "spac""e"
.
Panduan untuk nilai dan nama variabel SET cmd.exe
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
Variabel yang didefinisikan oleh sqlcmd dikenal sebagai variabel pembuatan skrip. Tabel berikut mencantumkan variabel pembuatan skrip sqlcmd .
Variabel | 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 diatur ulang dengan menggunakan perintah setvar dan perintah berikutnya menggunakan nilai baru.
Contoh
J. 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 set hasilnya.
Changed database context to 'AdventureWorks2022'
1>
C. Menggunakan variabel lingkungan prompt perintah 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 %Temp%
lingkungan tingkat pengguna diatur pada prompt perintah dan diteruskan ke sqlcmd
file input. 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.txt
input :
: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.txt
output .
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Menggunakan skrip startup
Skrip startup sqlcmd dijalankan saat sqlcmd dimulai. Contoh berikut mengatur variabel SQLCMDINI
lingkungan . 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
Ini memanggil init.sql
file ketika sqlcmd
dimulai.
SET sqlcmdini=c:\init.sql
sqlcmd
Ini adalah output.
1> <user> is connected to <server> (9.00.2047.00)
Catatan
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 Col1
dbo.VariableTest
yang berisi nilai $(tablename)
.
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
sqlcmd
Pada prompt, ketika tidak ada variabel yang diatur sama dengan $(tablename)
, pernyataan berikut mengembalikan baris dan juga mengembalikan pesan "'tablename' variabel scripting tidak ditentukan." Secara default, bendera -b
sqlcmd 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 set hasilnya.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Mengingat variabel MyVar
diatur ke $(tablename)
.
6> :setvar MyVar $(tablename)
Pernyataan ini mengembalikan baris dan juga mengembalikan pesan "'tablename' variabel scripting 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.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO