Bagikan melalui


Perintah dalam utilitas sqlcmd

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem 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.

Selain pernyataan Transact-SQL dalam sqlcmd, perintah berikut juga tersedia:

  • GO [ <count> ]
  • :List
  • [:]RESET
  • :Error
  • [:]ED 1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList 1
  • :XML [ ON | OFF ] 1
  • :Setvar
  • :Listvar

1 Tidak didukung di Linux atau macOS.

Ketahui hal-hal berikut saat Anda menggunakan perintah sqlcmd :

  • Semua perintah sqlcmd , kecuali GO, harus diawali oleh titik dua (:).

    Important

    Untuk mempertahankan kompatibilitas mundur dengan skrip osql yang ada, beberapa perintah dikenali tanpa menggunakan titik dua, seperti ditunjukkan oleh :.

  • perintah sqlcmd hanya dikenali jika muncul di awal baris.

  • Semua perintah sqlcmd tidak peka huruf besar/kecil.

  • Setiap perintah harus berada di baris terpisah. Perintah tidak dapat diikuti oleh pernyataan Transact-SQL atau perintah lain.

  • Perintah segera dijalankan. Mereka tidak dimasukkan ke dalam buffer eksekusi seperti pernyataan Transact-SQL.

Perintah pengeditan

[:]ED

Memulai editor teks. Editor ini dapat digunakan untuk mengedit batch Transact-SQL saat ini, atau batch terakhir yang dijalankan. Untuk mengedit batch terakhir yang dijalankan, ED perintah harus diketik segera setelah batch terakhir selesai dieksekusi.

Editor teks didefinisikan oleh SQLCMDEDITOR variabel lingkungan. Editor defaultnya adalah Edit. Untuk mengubah editor, atur SQLCMDEDITOR variabel lingkungan. Misalnya, untuk mengatur editor ke Microsoft Notepad, pada prompt perintah, ketik:

SET SQLCMDEDITOR=notepad

[:]RESET

Menghapus cache pernyataan.

:List

Mencetak isi cache pernyataan.

Variables

:Setvar <var> [ "nilai" ]

Menentukan variabel pembuatan skrip sqlcmd. Variabel pembuatan skrip memiliki format berikut: $(VARNAME).

Nama variabel tidak sensitif terhadap besar kecilnya huruf.

Variabel pembuatan skrip dapat diatur dengan cara berikut:

  • Secara implisit menggunakan opsi baris perintah. Misalnya, -l opsi mengatur SQLCMDLOGINTIMEOUTvariabel sqlcmd .
  • Secara eksplisit dengan menggunakan perintah :Setvar.
  • Menentukan variabel lingkungan sebelum Anda menjalankan sqlcmd.

Note

Opsi -X mencegah variabel lingkungan diteruskan ke sqlcmd.

Jika variabel yang ditentukan dengan menggunakan :Setvar dan variabel lingkungan memiliki nama yang sama, variabel yang ditentukan dengan menggunakan :Setvar lebih diutamakan.

Nama variabel tidak boleh berisi karakter spasi kosong.

Nama variabel tidak boleh memiliki formulir yang sama dengan ekspresi variabel, seperti $(var).

Jika nilai string variabel pembuatan skrip berisi spasi kosong, sertakan nilai dalam tanda kutip. Jika nilai untuk variabel skrip tidak ditentukan, variabel pembuatan skrip akan dihilangkan.

:Listvar

Menampilkan daftar variabel pembuatan skrip yang saat ini diatur.

Note

Hanya variabel pembuatan skrip yang diatur oleh sqlcmd, dan variabel yang diatur menggunakan :Setvar perintah, yang ditampilkan.

Perintah output

:Kesalahan<nama file> | STDERR | STDOUT

Alihkan semua output kesalahan ke file yang ditentukan oleh nama file, ke stderr atau ke stdout. Perintah :Error dapat muncul beberapa kali dalam skrip. Secara default, output kesalahan dikirim ke stderr.

  • filename

    Membuat dan membuka file yang menerima output. Jika file sudah ada, file dipotong menjadi nol byte. Jika file tidak tersedia karena izin atau alasan lain, output tidak dialihkan, dan dikirim ke tujuan terakhir yang ditentukan atau default.

  • STDERR

    Mengalihkan output kesalahan ke saluran stderr. Jika output telah dialihkan, target tempat aliran dialihkan menerima output kesalahan.

  • STDOUT

    Mengalihkan output kesalahan ke saluran stdout. Jika output telah dialihkan, target tempat aliran dialihkan menerima output kesalahan.

:Keluar <namafile> | STDERR | STDOUT

Membuat dan mengalihkan semua hasil kueri ke file yang ditentukan oleh nama file, ke stderr atau ke stdout. Secara default, output dikirim ke stdout. Jika file sudah ada, file dipotong menjadi nol byte. Perintah :Out dapat muncul beberapa kali dalam skrip.

:Perftrace <nama file> | STDERR | STDOUT

Membuat dan mengalihkan semua informasi pelacakan performa ke file yang ditentukan oleh nama file, ke stderr atau ke stdout. Secara default output pelacakan performa dikirim ke stdout. Jika file sudah ada, file dipotong menjadi nol byte. Perintah :Perftrace dapat muncul beberapa kali dalam skrip.

Perintah pengendalian eksekusi

:Pada Kesalahan [ keluar | abaikan ]

Mengatur tindakan yang akan dilakukan ketika kesalahan terjadi selama skrip atau eksekusi batch.

exit Saat opsi digunakan, sqlcmd keluar dengan nilai kesalahan yang sesuai.

ignore Saat opsi digunakan, sqlcmd mengabaikan kesalahan dan terus mengeksekusi batch atau skrip. Secara default, pesan kesalahan dicetak.

[:]QUIT

Menyebabkan sqlcmd berhenti.

[:]EXIT [ ( pernyataan ) ]

Memungkinkan Anda menggunakan hasil SELECT pernyataan sebagai nilai pengembalian dari sqlcmd. Jika numerik, kolom pertama dari baris hasil terakhir dikonversi menjadi bilangan bulat 4-byte (panjang). MS-DOS, Linux, dan macOS meneruskan byte rendah ke proses induk atau tingkat kesalahan sistem operasi. Windows 2000 dan versi yang lebih baru melewati bilangan bulat 4-byte secara utuh. Sintaksnya adalah :EXIT(query).

Contohnya:

:EXIT(SELECT @@ROWCOUNT)

Anda juga dapat menyertakan :EXIT parameter sebagai bagian dari file batch. Misalnya, pada prompt perintah, ketik:

sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"

Utilitas sqlcmd mengirimkan semuanya antara tanda kurung (()) ke server. Jika prosedur tersimpan sistem memilih satu set dan mengembalikan nilai, hanya pemilihan yang dikembalikan. Pernyataan :EXIT() tanpa apa pun di antara tanda kurung menjalankan semua yang ada sebelumnya dalam batch tersebut, dan kemudian keluar tanpa mengembalikan nilai.

Ketika kueri yang salah ditentukan, sqlcmd keluar tanpa nilai yang dikembalikan.

Berikut adalah daftar format EXIT:

  • :EXIT

    Tidak menjalankan batch, lalu langsung keluar dan tidak mengembalikan nilai.

  • :EXIT( )

    Menjalankan batch, lalu keluar dan tidak mengembalikan nilai.

  • :EXIT(query)

    Menjalankan batch yang menyertakan kueri, lalu keluar setelah mengembalikan hasil kueri.

Jika RAISERROR digunakan dalam skrip sqlcmd , dan status 127 dinaikkan, sqlcmd berhenti, dan mengembalikan ID pesan kembali ke klien. Contohnya:

RAISERROR(50001, 10, 127)

Kesalahan ini menyebabkan skrip sqlcmd berakhir dan mengembalikan ID pesan 50001 ke klien.

Nilai pengembalian dari -1 sampai -99 dicadangkan oleh SQL Server, dan sqlcmd menetapkan nilai-nilai pengembalian tambahan berikut:

Mengembalikan nilai Description
-100 Terjadi kesalahan sebelum memilih nilai pengembalian.
-101 Tidak ada baris yang ditemukan saat memilih nilai pengembalian.
-102 Terjadi kesalahan konversi saat memilih nilai pengembalian.

GO [hitung]

GO menandakan akhir batch dan eksekusi pernyataan Transact-SQL yang di-cache. Batch dijalankan berulang kali dalam batch terpisah. Anda tidak dapat mendeklarasikan variabel lebih dari sekali dalam satu batch.

Perintah lain-lain

:r <nama file>

Mengurai pernyataan Transact-SQL tambahan dan perintah sqlcmd dari file yang ditentukan oleh nama file ke dalam cache pernyataan. nama file dibaca relatif terhadap direktori startup tempat sqlcmd dijalankan.

Jika file berisi pernyataan Transact-SQL yang tidak diikuti oleh GO, Anda harus memasukkan GO pada baris yang mengikuti :r.

File akan dibaca dan dijalankan setelah terminator batch ditemukan. Anda dapat mengeluarkan beberapa :r perintah. File dapat menyertakan perintah sqlcmd apa pun, termasuk penanda akhir batch GO.

Note

Jumlah baris yang ditampilkan dalam mode interaktif ditingkatkan satu untuk setiap :r perintah yang ditemui. Perintah :r muncul dalam output perintah daftar.

:ServerList

Mencantumkan server yang dikonfigurasi secara lokal dan nama server yang disiarkan di jaringan.

:Sambungkan server_name[\instance_name] [-l waktu habis] [-U user_name [-P password]]

Menghubungkan ke sebuah instance dari SQL Server. Selain itu, mengakhiri koneksi yang sedang berlangsung.

Opsi batas waktu:

Value Behavior
0 Tunggu selamanya
n>0 Tunggu n detik

Variabel SQLCMDSERVER pembuatan skrip mencerminkan koneksi aktif saat ini.

Jika batas waktu tidak ditentukan, nilai SQLCMDLOGINTIMEOUT variabel adalah default.

Jika hanya user_name yang ditentukan (baik sebagai opsi, atau sebagai variabel lingkungan), pengguna diminta untuk memasukkan kata sandi. Pengguna tidak diminta jika SQLCMDUSER variabel lingkungan atau SQLCMDPASSWORD diatur. Jika Anda tidak menyediakan opsi atau variabel lingkungan, mode Autentikasi Windows digunakan untuk masuk. Misalnya, untuk menyambungkan ke instans, instance1, dari SQL Server, myserver, dengan menggunakan keamanan terintegrasi, Anda akan menggunakan perintah berikut:

:connect myserver\instance1

Untuk menyambungkan ke instans default myserver menggunakan variabel skrip, Anda akan menggunakan pengaturan berikut:

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! command

Menjalankan perintah sistem operasi. Untuk menjalankan perintah sistem operasi, mulai baris dengan dua tanda seru (!!) diikuti oleh perintah sistem operasi. Contohnya:

:!! dir

Note

Perintah dijalankan pada komputer tempat sqlcmd berjalan.

:XML [ ON | NONAKTIF ]

Untuk informasi selengkapnya, lihat Format Output XML dan Format Output JSON di artikel ini.

:Help

Mencantumkan perintah sqlcmd , bersama dengan deskripsi singkat dari setiap perintah.

nama berkas sqlcmd

File input sqlcmd dapat ditentukan dengan opsi -i atau perintah :r. file output dapat ditentukan dengan opsi -o atau dengan perintah :Error, :Out, dan :Perftrace. Berikut ini adalah beberapa panduan untuk bekerja dengan file-file ini:

  • :Error, :Out, dan :Perftrace harus menggunakan nilai nama file terpisah. Jika nama file yang sama digunakan, input dari perintah mungkin tercampur.

  • Jika file input yang terletak di server jarak jauh dipanggil dari sqlcmd di komputer lokal, dan file berisi jalur file drive seperti :Out c:\OutputFile.txt, file output dibuat di komputer lokal dan bukan di server jarak jauh.

  • Jalur file yang valid meliputi: C:\<filename>, \\<Server>\<Share$>\<filename>, dan "C:\Some Folder\<file name>". Jika ada spasi di jalur, gunakan tanda kutip.

  • Setiap sesi sqlcmd baru akan menimpa file yang sudah ada dengan nama yang sama.

Pesan informasi

sqlcmd mencetak pesan informasi apa pun yang dikirim oleh server. Dalam contoh berikut, setelah pernyataan Transact-SQL dijalankan, pesan informasi dicetak.

Mulai sqlcmd. Ketik kueri di prompt perintah sqlcmd:

USE AdventureWorks2022;
GO

Saat Anda menekan ENTER, pesan informasi berikut dicetak:

Changed database context to 'AdventureWorks2022'.

Format output dari kueri Transact-SQL

sqlcmd terlebih dahulu mencetak header kolom yang berisi nama kolom yang ditentukan dalam daftar pemilihan. Nama kolom dipisahkan dengan menggunakan SQLCMDCOLSEP karakter . Secara default, pemisah kolom ini adalah spasi. Jika nama kolom lebih pendek dari lebar kolom, output diisi dengan spasi hingga kolom berikutnya.

Baris ini diikuti oleh garis pemisah yang merupakan serangkaian karakter tanda hubung. Output berikut menunjukkan contoh.

Mulai sqlcmd. Ketik kueri di prompt perintah sqlcmd:

USE AdventureWorks2022;

SELECT TOP (2) BusinessEntityID,
               FirstName,
               LastName
FROM Person.Person;
GO

Saat Anda menekan ENTER, kumpulan hasil berikut dikembalikan.

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

BusinessEntityID Meskipun lebar kolom hanya empat karakter, kolom diperluas untuk mengakomodasi nama kolom yang lebih panjang. Secara default, output dihentikan pada 80 karakter. Lebar ini dapat diubah dengan menggunakan -w opsi , atau dengan mengatur SQLCMDCOLWIDTH variabel pembuatan skrip.

Format keluaran XML

Output XML yang merupakan hasil dari klausul FOR XML adalah output yang tidak diformat, dalam aliran yang berkelanjutan.

Saat Anda mengharapkan output XML, gunakan perintah berikut: :XML ON.

Note

sqlcmd mengembalikan pesan kesalahan dalam format biasa. Pesan kesalahan juga diproduksi dalam aliran teks XML dalam format XML. Dengan menggunakan :XML ON, sqlcmd tidak menampilkan pesan informasi.

Untuk mengatur mode XML ke nonaktif, gunakan perintah berikut: :XML OFF.

Perintah GO tidak boleh muncul sebelum :XML OFF perintah dikeluarkan, karena :XML OFF perintah mengalihkan sqlcmd kembali ke output berorientasi baris.

Data XML (dialirkan) dan data himpunan baris tidak dapat dicampur. Jika perintah :XML ON tidak dikeluarkan sebelum pernyataan Transact-SQL, yang mengeluarkan aliran XML, dijalankan, outputnya akan kacau. :XML ON Setelah perintah dikeluarkan, Anda tidak dapat menjalankan pernyataan Transact-SQL yang menghasilkan kumpulan baris reguler.

Note

Perintah :XML tidak mendukung pernyataan SET STATISTICS XML.

Format JSON output

Saat Anda mengharapkan output JSON, gunakan perintah berikut: :XML ON. Jika tidak, output mencakup nama kolom dan teks JSON. Output ini bukan JSON yang valid.

Untuk mengatur mode XML ke nonaktif, gunakan perintah berikut: :XML OFF.

Untuk informasi selengkapnya, lihat Format Output XML di artikel ini.

Menggunakan autentikasi Microsoft Entra

Contoh menggunakan autentikasi Microsoft Entra:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30