sqlcmd - Gunakan dengan variabel pembuatan skrip

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform 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 opsi sqlcmd -v .

Artikel ini juga menyertakan contoh yang menentukan variabel lingkungan pada prompt perintah Cmd.exe dengan menggunakan SET.

Atur Variabel Pembuatan Skrip dengan Menggunakan Perintah setvar

Perintah setvar digunakan untuk menentukan variabel 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 akan berhenti. Untuk informasi selengkapnya, lihat opsi -b di utilitas Sqlcmd.

Prioritas Variabel (Rendah ke Tinggi)

Jika lebih dari satu jenis variabel memiliki nama yang sama, variabel dengan prioritas tertinggi digunakan.

  1. Variabel lingkungan tingkat sistem

  2. Variabel lingkungan tingkat pengguna

  3. Command shell (SET X=Y) diatur pada prompt perintah sebelum memulai sqlcmd

  4. sqlcmd -v X=Y

  5. :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 mengatur variabel SQLLOGINTIMEOUT.

c:\> sqlcmd -l 60

Anda juga dapat menggunakan opsi -v 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 skrip:

  • Nilai variabel yang ditentukan dengan menggunakan setvar atau opsi -v 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 ini mencantumkan variabel pembuatan skrip sqlcmd .

Variabel Opsi terkait R/W Default
SQLCMDUSER* -U R ""
SQLCMDPASSWORD* -P -- ""
SQLCMDSERVER* -S R "DefaultLocalInstance"
SQLCMDWORKSTATION -H R "ComputerName"
SQLCMDDBNAME -d R ""
SQLCMDLOGINTIMEOUT -L R/W "8" (detik)
SQLCMDSTATTIMEOUT -T R/W "0" = tunggu tanpa batas waktu
SQLCMDHEADERS -h R/W "0"
SQLCMDCOLSEP -s R/W " "
SQLCMDCOLWIDTH -W R/W "0"
SQLCMDPACKETSIZE -J R "4096"
SQLCMDERRORLEVEL -m R/W "0"
SQLCMDMAXVARTYPEWIDTH -Y R/W "256"
SQLCMDMAXFIXEDTYPEWIDTH -Y R/W "0" = tidak terbatas
SQLCMDEDITOR R/W "edit.com"
SQLCMDINI R ""

SQLCMDUSER, SQLCMDPASSWORD dan SQLCMDSERVER diatur saat :Connect digunakan.

R menunjukkan nilai hanya dapat diatur satu kali selama inisialisasi program.

R/W menunjukkan bahwa nilai dapat diatur ulang dengan menggunakan perintah setvar dan perintah berikutnya akan menggunakan nilai baru.

Contoh

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 adalah hasil yang ditetapkan.

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.

C:\>SET tablename=Person.Person
C:\>SET col1=FirstName
C:\>SET col2=LastName
C:\>SET title=Ms.
C:\>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, dalam 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 ini dimasukkan di prompt perintah:

C:\ >SET MyTempDirectory=%Temp%\output.txt
C:\ >sqlcmd -i C:\testscript.txt

Hasil berikut dikirim ke file output C:\Documents and Settings\<user>\Local Settings\Temp\output.txt.

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 SQLCMDINIlingkungan . 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.

c:\> SET sqlcmdini=c:\init.sql
>1 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;
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

sqlcmd Pada perintah, 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 -bsqlcmd tidak diatur. Jika -b diatur, sqlcmd akan berakhir setelah kesalahan "variabel tidak ditentukan".

C:\> 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 adalah hasil yang ditetapkan.

>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

Langkah berikutnya