Bagikan melalui


Utilitas sqlcmd

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Database SQL di Microsoft Fabric

Gunakan utilitas sqlcmd untuk memasukkan pernyataan Transact-SQL, prosedur sistem, dan file skrip melalui berbagai mode:

  • Pada prompt perintah.
  • Di Editor Kueri dalam mode SQLCMD.
  • Dalam file skrip Windows.
  • Dalam langkah pekerjaan sistem operasi (cmd.exe) pada pekerjaan SQL Server Agent.

Note

Meskipun MICROSOFT Entra ID adalah nama baru untuk Azure Active Directory (Azure AD), untuk mencegah mengganggu lingkungan yang ada, Azure AD masih tetap berada di beberapa elemen yang dikodekan secara permanen seperti bidang UI, penyedia koneksi, kode kesalahan, dan cmdlet. Dalam artikel ini, dua nama tersebut dapat dipertukarkan.

varian sqlcmd

Ada dua varian sqlcmd :

  • sqlcmd (Go): go-mssqldbsqlcmd berbasis, kadang-kadang disebut sebagai go-sqlcmd. Versi ini adalah alat mandiri yang dapat Anda unduh secara independen dari SQL Server. Ini berjalan pada Windows, macOS, Linux, dan dalam kontainer.

  • sqlcmd (ODBC): Sqlcmd berbasis ODBC yang selaras dengan platform, tersedia dengan SQL Server atau Utilitas Baris Perintah Microsoft, dan bagian mssql-tools dari paket di Linux. Ini juga berjalan di Windows, macOS, Linux, dan dalam kontainer.

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.

Dukungan TDS 8.0

SQL Server 2025 (17.x) memperkenalkan dukungan TDS 8.0 untuk utilitas sqlcmd .

Syntax

Dalam artikel ini, istilah opsi, parameter, argumen baris perintah, dan sakelar dapat digunakan secara bergantian.

sqlcmd (Go) memiliki dua mode bantuan: --help untuk sub-perintah modern dan -? untuk bendera yang kompatibel dengan ODBC.

Perintah modern (--help)

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Bendera yang kompatibel dengan ODBC (-?)

sqlcmd
   -a packet_size
   -A (dedicated administrator connection)
   -b (terminate batch job if there is an error)
   -c batch_terminator
   -C (trust the server certificate)
   -d db_name
   -e (echo input)
   -E (use trusted connection)
   -F hostname_in_certificate
   -g (enable column encryption)
   -G (use Azure Active Directory for authentication)
   -h rows_per_header
   -H workstation_name
   -i input_file
   -I (enable quoted identifiers, always on)
   -k[1 | 2] (remove or replace control characters)
   -K application_intent
   -l login_timeout
   -L[c] (list servers, optional clean output)
   -m error_level
   -M multisubnet_failover (always enabled)
   -N[s|m|o] (encrypt connection)
   -o output_file
   -P password
   -q "cmdline query"
   -Q "cmdline query" (and exit)
   -r[0 | 1] (msgs to stderr)
   -R (ignored, client regional settings not used)
   -s col_separator
   -S [protocol:]server[instance_name][,port]
   -t query_timeout
   -u (unicode output file)
   -U login_id
   -v var = "value"
   -V error_severity_level
   -w screen_width
   -W (remove trailing spaces)
   -x (disable variable substitution)
   -X[1] (disable commands, startup script, environment variables, optional exit)
   -y variable_length_type_display_width
   -Y fixed_length_type_display_width
   -z new_password
   -Z new_password (and exit)
   --authentication-method (Azure SQL authentication method)
   --driver-logging-level (mssql driver log level)
   --vertical (print results in vertical format)
   -? (usage)

Melanggar perubahan dari sqlcmd (ODBC)

Beberapa sakelar dan perilaku berbeda dalam utilitas sqlcmd (Go). Untuk daftar bendera yang hilang paling terbaru untuk kompatibilitas mundur, lihat diskusi GitHub yang berjudul Prioritaskan implementasi bendera kompatibilitas mundur.

  • sqlcmd (Go) mendukung pengalihan -P . Untuk Autentikasi SQL Server, Anda dapat menyediakan kata sandi melalui mekanisme ini:

    • Opsi -P baris perintah
    • Variabel SQLCMDPASSWORD lingkungan
    • Perintah :CONNECT
    • Ketika diminta, ketik kata sandi untuk menyelesaikan koneksi
  • Sakelar -r memerlukan argumen 0 atau 1.

  • Sakelar -R diabaikan. Runtime Go tidak menyediakan akses ke informasi lokal pengguna.

  • Sakelar -I diabaikan. Pengidentifikasi yang dikutip selalu diaktifkan. Untuk menonaktifkan perilaku pengidentifikasi yang dikutip, tambahkan SET QUOTED IDENTIFIER OFF ke dalam skrip Anda.

  • Sakelar -M diabaikan. sqlcmd (Go) selalu mengaktifkan failover multi-subnet.

  • -N mengambil nilai string untuk menentukan pilihan enkripsi, yang merupakan salah satu dari s[trict], ,t[rue]/m[andatory]/yes/1o[ptional]/no/0/f[alse] , atau .disable

    • Jika Anda tidak menyediakan -N dan -C, sqlcmd menegosiasikan autentikasi dengan server tanpa memvalidasi sertifikat server.
    • Jika Anda menyediakan -N tetapi tidak -C, sqlcmd memerlukan validasi sertifikat server. false Nilai untuk enkripsi mungkin masih menyebabkan enkripsi paket login.
    • Jika Anda menyediakan -N dan -C, sqlcmd menggunakan nilainya untuk negosiasi enkripsi.
    • Untuk informasi selengkapnya tentang negosiasi enkripsi klien/server, lihat MS-TDS PRELOGIN.

    Important

    Di SQL Server 2025 (17.x), -N dapat berupa o (untuk optional), m (untuk mandatory, yang merupakan default), atau s (untuk strict). Jika Anda tidak menyertakan -N, -Nm (untuk mandatory) adalah default. Perilaku ini adalah perubahan mendasar dari SQL Server 2022 (16.x) dan versi yang lebih lama.

  • -u Dengan sakelar, file output Unicode yang dihasilkan diawali dengan tanda urutan byte (BOM) little-endian UTF-16.

  • Beberapa perilaku yang disimpan untuk mempertahankan kompatibilitas dengan OSQL mungkin telah berubah, seperti perataan header kolom untuk beberapa jenis data.

  • Semua perintah harus pas pada satu baris, bahkan EXIT. Mode interaktif tidak memeriksa tanda kurung terbuka atau tanda kutip untuk perintah, dan tidak meminta baris berturut-turut. Perilaku ini berbeda dari versi ODBC, yang memungkinkan kueri dijalankan oleh EXIT(query) untuk menjangkau beberapa baris.

sqlcmd (Go) mendukung memori bersama, pipa bernama, dan transpor TCP. Gunakan awalan protokol yang sesuai pada nama server untuk memaksa protokol:

  • lpc untuk memori bersama (hanya localhost)
  • np untuk pipa bernama, atau gunakan jalur pipa bernama UNC sebagai nama server
  • tcp untuk TCP

Jika Anda tidak menentukan protokol, sqlcmd mencoba memanggil dalam urutan ini: lpc>np>tcp. Saat menyambungkan ke host jarak jauh, elemen lpc dilewati.

Enhancements

  • :Connectmemiliki parameter opsional -G untuk memilih salah satu metode autentikasi untuk Azure SQL Database - SqlAuthentication, , ActiveDirectoryDefault, ActiveDirectoryIntegratedActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword. Untuk informasi selengkapnya, lihat Mengautentikasi dengan ID Microsoft Entra di sqlcmd. Jika -G tidak disediakan, Keamanan terintegrasi atau autentikasi SQL Server digunakan, tergantung pada keberadaan -U parameter nama pengguna.

  • Parameter baris perintah --driver-logging-level memungkinkan Anda melihat log dari driver go-mssqldb. Gunakan 64 untuk melihat semua jejak.

  • sqlcmd (Go) dapat mencetak hasil menggunakan format vertikal. Gunakan sakelar --vertical baris perintah untuk mengaturnya. Variabel SQLCMDFORMAT pembuatan skrip juga mengontrolnya.

Opsi baris perintah

Tabel berikut mencantumkan opsi baris perintah yang tersedia di sqlcmd, dan sistem operasi mana yang mereka dukung.

Opsi baris perintah Didukung pada Windows Didukung di Linux dan macOS
Opsi terkait login
-A Yes No
-C Yes Yes
-d db_name Yes Yes
-D Yes Yes
- Aku login_timeout Yes Yes
-E Yes Yes
-F hostname_dalam_sertifikat Yes Yes
-g Yes Yes
-G Yes Yes
-H workstation_name Yes Yes
-j Yes Yes
-J sertifikat_server No Yes
-K application_intent Yes Yes
-M multisubnet_failover Yes Yes
-N[s|m|o] Yes Yes
Kata sandi -P Yes Yes
-S [protocol:]server[\instance_name][,port] Yes Yes
-U login_id Yes Yes
-z new_password Yes Yes
-Z new_password Yes Yes
Opsi input/output
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Yes Yes
-i input_file[,input_file2...] Yes Yes
-o output_file Yes Yes
-r[0 | 1] Yes Yes
-R Yes Yes
-u Yes Yes
Opsi pelaksanaan kueri
-e Yes Yes
-I Yes Yes
-q "kueri baris perintah" Yes Yes
-Q "kueri baris perintah" Yes Yes
-t query_timeout Yes Yes
-v var = value [ var = value... ] Yes No
-x Yes Yes
Opsi format
-h Header Yes Yes
-k [1 | 2] Yes Yes
-s col_separator Yes Yes
-w screen_width Yes Yes
-W Yes Yes
-y variable_length_type_display_width Yes Yes
-Y fixed_length_type_display_width Yes Yes
Opsi pelaporan kesalahan
-b Yes Yes
-m error_level Yes Yes
-V error_severity_level Yes Yes
Opsi lain-lain
-a packet_size Yes Yes
-c batch_terminator Yes Yes
-L[c] Yes No
-p[1] Yes Yes
-X[1] Yes Yes
-? Yes Yes

-A

Berlaku untuk: Hanya Windows. Tidak mendukung Linux dan macOS.

Masuk ke SQL Server dengan koneksi administrator khusus (DAC). Gunakan koneksi semacam ini untuk memecahkan masalah server. Koneksi ini hanya berfungsi dengan komputer server yang mendukung DAC. Jika DAC tidak tersedia, sqlcmd menghasilkan pesan kesalahan, lalu keluar. Untuk informasi selengkapnya tentang DAC, lihat Koneksi diagnostik untuk administrator database. Opsi -A tidak didukung dengan -G opsi . Saat menyambungkan ke Azure SQL Database dengan menggunakan -A, Anda harus menjadi administrator di server SQL logis. DAC tidak tersedia untuk administrator Microsoft Entra.

Note

Untuk informasi tentang cara membuat koneksi administrator khusus (DAC) di macOS atau Linux, lihat Panduan Pemrograman.

-C

Gunakan opsi ini untuk mengonfigurasi klien agar secara implisit mempercayai sertifikat server tanpa validasi. Opsi ini setara dengan opsi TRUSTSERVERCERTIFICATE = trueADO.NET .

Untuk utilitas sqlcmd (Go), kondisi berikut juga berlaku:

  • Jika Anda tidak menyediakan -N dan -C, sqlcmd menegosiasikan autentikasi dengan server tanpa memvalidasi sertifikat server.
  • Jika Anda menyediakan -N tetapi tidak -C, sqlcmd memerlukan validasi sertifikat server. false Nilai untuk enkripsi mungkin masih menyebabkan enkripsi paket login.
  • Jika Anda menyediakan -N dan -C, sqlcmd menggunakan nilainya untuk negosiasi enkripsi.

-d db_name

USE <db_name> Mengeluarkan instruksi ketika memulai sqlcmd. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDDBNAME. Parameter ini menentukan database awal. Defaultnya adalah pengaturan database bawaan dari login Anda. Jika database tidak ada, pesan kesalahan dihasilkan dan sqlcmd keluar.

-D

Menginterpretasikan nama server yang disediakan ke -S sebagai DSN alih-alih nama host. Untuk informasi selengkapnya, lihat Dukungan DSN di sqlcmd dan bcp.

Note

Opsi -D ini hanya tersedia di klien Linux dan macOS. Pada klien Windows, ini mengacu pada opsi usang yang dihapus, dan diabaikan.

- Aku login_timeout

Menentukan jumlah detik sebelum login sqlcmd ke driver ODBC habis waktu ketika mencoba menyambungkan ke server. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDLOGINTIMEOUT. Batas waktu default untuk masuk ke sqlcmd adalah 8 detik. Saat menggunakan -G opsi untuk menyambungkan ke Azure SQL Database atau Azure Synapse Analytics dan mengautentikasi dengan ID Microsoft Entra, nilai batas waktu setidaknya 30 detik disarankan. Batas waktu masuk harus berupa angka antara 0 dan 65534. Jika nilainya tidak numerik, atau tidak termasuk dalam rentang tersebut, sqlcmd menghasilkan pesan kesalahan. Nilai 0 menentukan batas waktu menjadi tak terbatas.

-E

Menggunakan koneksi tepercaya alih-alih menggunakan nama pengguna dan kata sandi untuk masuk ke SQL Server. Secara default, tanpa -E ditentukan, sqlcmd menggunakan opsi koneksi tepercaya.

Opsi -E mengabaikan kemungkinan pengaturan variabel lingkungan untuk nama pengguna dan kata sandi seperti SQLCMDPASSWORD. -E Jika opsi digunakan bersama dengan -U opsi atau -P opsi , pesan kesalahan akan dihasilkan.

Note

Untuk informasi selengkapnya tentang membuat koneksi tepercaya yang menggunakan autentikasi terintegrasi dari klien Linux atau macOS, lihat Menggunakan Autentikasi Terintegrasi.

-F hostname_in_certificate

Menentukan Nama Umum (CN) atau Nama Alternatif Subjek (SAN) yang berbeda dan diharapkan dalam sertifikat server yang akan digunakan selama validasi sertifikat server. Tanpa opsi ini, validasi sertifikat memastikan bahwa CN atau SAN dalam sertifikat cocok dengan nama server yang Anda sambungkan. Anda dapat menggunakan parameter ini saat nama server tidak cocok dengan CN atau SAN, misalnya, saat menggunakan alias DNS.

Contohnya:

sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com

Note

sqlcmd (Go) juga menggunakan -F untuk menentukan nama host dalam sertifikat server. Untuk mencetak hasil dalam format vertikal, sqlcmd (Go) menggunakan sakelar --vertical.

-g

Mengatur pengaturan Enkripsi Kolom ke Enabled. Untuk informasi selengkapnya, lihat Always Encrypted. Hanya kunci master yang disimpan di Penyimpanan Sertifikat Windows yang didukung. Opsi ini -g memerlukan setidaknya sqlcmd versi 13.1. Untuk menentukan versi Anda, jalankan sqlcmd -?.

-G

Gunakan opsi ini untuk mengautentikasi dengan Microsoft Entra saat menyambungkan ke Azure SQL Database atau Azure Synapse Analytics. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDUSEAAD = true. Opsi ini -G memerlukan setidaknya sqlcmd versi 13.1. Untuk menentukan versi Anda, jalankan sqlcmd -?. Untuk informasi selengkapnya, lihat Autentikasi Microsoft Entra untuk Azure SQL. Opsi -A tidak didukung dengan -G opsi .

Opsi -G ini hanya berlaku untuk Azure SQL Database dan Azure Synapse Analytics.

Autentikasi interaktif Microsoft Entra saat ini tidak didukung di Linux atau macOS. Autentikasi terintegrasi Microsoft Entra memerlukan Unduh Driver ODBC untuk SQL Server versi 17.6.1 atau yang lebih tinggi dan lingkungan Kerberos yang dikonfigurasi dengan benar.

Untuk informasi selengkapnya tentang autentikasi Microsoft Entra, lihat Mengautentikasi dengan ID Microsoft Entra di sqlcmd.

-H workstation_name

Nama stasiun kerja. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDWORKSTATION. Nama stasiun kerja muncul di hostname kolom sys.sysprocesses tampilan katalog, dan dapat dikembalikan dengan menggunakan prosedur tersimpan sp_who . Jika Anda tidak menentukan opsi ini, defaultnya adalah nama komputer saat ini. Gunakan nama ini untuk mengidentifikasi sesi sqlcmd yang berbeda.

-j

Mencetak pesan kesalahan mentah ke layar.

-J sertifikat_server

Berlaku untuk: sqlcmd (ODBC), Linux, dan macOS saja. Windows tidak didukung.

Menentukan jalur ke file sertifikat server. File ini cocok dengan sertifikat enkripsi koneksi server. Kecocokan dilakukan alih-alih validasi sertifikat standar (kedaluwarsa, nama host, rantai kepercayaan, dan sebagainya). Format sertifikat yang diterima adalah PEM, DER, dan CER.

Gunakan opsi ini saat menyambungkan ke server yang menggunakan sertifikat atau sertifikat yang ditandatangani sendiri yang dikeluarkan oleh otoritas sertifikat privat. Jika enkripsi diaktifkan dan validasi sertifikat gagal, koneksi gagal.

Contohnya:

sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -J /etc/ssl/certs/server_certificate.cer

-K application_intent

Menyatakan jenis beban kerja aplikasi saat menyambungkan ke server. Satu-satunya nilai yang saat ini didukung adalah ReadOnly. Jika Anda tidak menentukan -K, sqlcmd tidak mendukung konektivitas ke replika sekunder dalam grup ketersediaan. Untuk informasi selengkapnya, lihat Memindahkan beban kerja hanya-baca ke replika sekunder grup ketersediaan Always On.

Note

-K tidak didukung di SUSE Linux Enterprise Server (SLES). Namun, Anda dapat menentukan ApplicationIntent=ReadOnly kata kunci dalam file DSN yang diteruskan ke sqlcmd. Untuk informasi selengkapnya, lihat Dukungan DSN di sqlcmd dan bcp nanti di artikel ini.

Untuk informasi selengkapnya, lihat Ketersediaan tinggi dan pemulihan bencana di Linux dan macOS.

-M multisubnet_failover

Selalu tentukan -M saat menyambungkan ke pendengar grup ketersediaan SQL Server atau Instans Kluster Failover SQL Server. -M menyediakan deteksi dan koneksi yang lebih cepat ke server aktif (saat ini). Jika Anda tidak menentukan -M, -M nonaktif.

Untuk informasi selengkapnya, lihat:

Note

-M tidak didukung di SUSE Linux Enterprise Server (SLES). Namun, Anda dapat menentukan MultiSubnetFailover=Yes kata kunci dalam file DSN yang diteruskan ke sqlcmd. Untuk informasi selengkapnya, lihat Dukungan DSN di sqlcmd dan bcp nanti di artikel ini.

Untuk informasi selengkapnya, lihat Ketersediaan tinggi dan pemulihan bencana di Linux dan macOS.

-N[s|m|o]

Klien menggunakan opsi ini untuk meminta koneksi terenkripsi.

Sakelar dapat berupa -N (untuk o), optional (untuk m, default), atau mandatory (untuk s). Jika Anda tidak menyertakan -N, defaultnya adalah -Nm (untuk mandatory). Default ini adalah perubahan yang tidak kompatibel dari SQL Server 2022 (16.x) dan versi-versi sebelumnya, di mana defaultnya adalah -No.

Untuk utilitas sqlcmd (Go), -N ambil nilai string yang bisa menjadi salah satu dari true, false, atau disable untuk menentukan pilihan enkripsi. (default sama dengan menghilangkan parameter):

  • Jika Anda tidak menyediakan -N dan -C, sqlcmd menegosiasikan autentikasi dengan server tanpa memvalidasi sertifikat server.

  • Jika Anda menyediakan -N tetapi tidak -C, sqlcmd memerlukan validasi sertifikat server. false Nilai untuk enkripsi mungkin masih menyebabkan enkripsi paket login.

  • Jika Anda menyediakan -N dan -C, sqlcmd menggunakan nilainya untuk negosiasi enkripsi.

Kata sandi -P

Kata sandi yang ditentukan pengguna. Kata sandi sensitif terhadap huruf besar dan kecil. Jika Anda menggunakan -U opsi , tetapi jangan gunakan -P opsi atau atur SQLCMDPASSWORD variabel lingkungan, sqlcmd meminta kata sandi kepada pengguna. Jangan gunakan kata sandi null (kosong), tetapi Anda dapat menentukan kata sandi null dengan menggunakan sepasang tanda kutip ganda yang berdampingan untuk nilai parameter ("").

Important

Penggunaan -P tidak aman. Hindari memberikan kata sandi pada baris perintah. Atau, gunakan SQLCMDPASSWORD variabel lingkungan, atau masukkan kata sandi secara interaktif dengan menghilangkan -P opsi .

Gunakan kata sandi yang kuat.

Perintah kata sandi ditampilkan dengan mencetak permintaan kata sandi ke konsol, sebagai berikut: Password:

Input pengguna disembunyikan. Ini berarti bahwa tidak ada yang ditampilkan dan kursor tetap berada di posisi.

Variabel SQLCMDPASSWORD lingkungan memungkinkan Anda mengatur kata sandi default untuk sesi saat ini. Oleh karena itu, kata sandi tidak harus dikodekan secara permanen ke dalam file batch. Contoh berikut pertama-tama mengatur variabel SQLCMDPASSWORD di prompt perintah dan kemudian mengakses utilitas sqlcmd.

Pada prompt perintah, ketik perintah berikut. Ganti <password> dengan kata sandi yang valid.

SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd

Jika kombinasi nama pengguna dan kata sandi salah, pesan kesalahan akan dihasilkan.

Note

Variabel OSQLPASSWORD lingkungan disimpan untuk kompatibilitas mundur. Variabel SQLCMDPASSWORD lingkungan lebih diutamakan daripada OSQLPASSWORD variabel lingkungan. Ini berarti bahwa sqlcmd dan osql dapat digunakan di samping satu sama lain tanpa gangguan. Skrip lama terus berfungsi.

Jika Anda menggunakan opsi -P dengan opsi -E, pesan kesalahan akan muncul.

Jika Anda menggunakan -P opsi dengan lebih dari satu argumen, pesan kesalahan dihasilkan dan program keluar.

Kata sandi yang berisi karakter khusus dapat menghasilkan pesan kesalahan. Anda harus menghindari karakter khusus saat menggunakan -P, atau menggunakan variabel lingkungan sebagai gantinya SQLCMDPASSWORD .

Di Linux dan macOS, saat digunakan dengan -G opsi tanpa -U, -P menentukan file yang berisi token akses (v17.8+). File token harus dalam format UTF-16LE (tanpa BOM).

Token akses dapat diperoleh melalui berbagai metode. Anda harus memastikan token akses benar byte-for-byte, karena dikirim as-is. Contoh perintah berikut mendapatkan token akses. Perintah ini menggunakan perintah Azure CLI dan Linux dan menyimpannya ke file dalam format yang tepat. Jika pengodean default sistem atau terminal Anda bukan ASCII atau UTF-8, Anda mungkin perlu menyesuaikan opsi iconv. Pastikan untuk mengamankan file yang dihasilkan dengan hati-hati dan menghapusnya saat tidak lagi diperlukan.

az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile

-S [protocol:]server[\instance_name][,port]

Menentukan instans SQL Server yang akan disambungkan. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDSERVER.

Tentukan server_name untuk menyambungkan ke instans default SQL Server di komputer server tersebut. Tentukan server_name[\instance_name] untuk menyambungkan ke instans SQL Server bernama di komputer server tersebut. Jika Anda tidak menentukan komputer server, sqlcmd tersambung ke instans default SQL Server di komputer lokal. Opsi ini diperlukan ketika Anda menjalankan sqlcmd dari komputer jarak jauh pada jaringan.

protokol dapat berupa tcp (TCP/IP), lpc (memori bersama), atau np (pipa bernama).

Jika Anda tidak menentukan server_name[\instance_name] saat memulai sqlcmd, SQL Server akan memeriksa dan menggunakan SQLCMDSERVER variabel lingkungan.

Note

Variabel OSQLSERVER lingkungan disimpan untuk kompatibilitas mundur. Variabel SQLCMDSERVER lingkungan lebih diutamakan daripada OSQLSERVER variabel lingkungan. Ini berarti bahwa sqlcmd dan osql dapat digunakan di samping satu sama lain tanpa gangguan. Skrip lama terus berfungsi.

Driver ODBC di Linux dan macOS memerlukan -S. Satu-satunya nilai protokol yang valid adalah tcp.

-U login_id

Nama login atau nama pengguna yang terdapat dalam database. Untuk pengguna database terisolasi, Anda harus menyediakan opsi nama database (-d).

Note

Variabel OSQLUSER lingkungan disimpan untuk kompatibilitas mundur. Variabel SQLCMDUSER lingkungan lebih diutamakan daripada OSQLUSER variabel lingkungan. Ini berarti bahwa sqlcmd dan osql dapat digunakan di samping satu sama lain tanpa gangguan. Skrip lama terus berfungsi.

Jika Anda tidak menentukan -U opsi atau -P opsi , sqlcmd mencoba menyambungkan dengan menggunakan mode Autentikasi Windows. Autentikasi didasarkan pada akun Windows pengguna yang menjalankan sqlcmd.

Jika Anda memakai opsi -U bersama opsi -E (yang akan dijelaskan di artikel ini), maka pesan galat akan muncul. -U Jika opsi diikuti oleh lebih dari satu argumen, pesan kesalahan dihasilkan dan program keluar.

-z new_password

Ubah kata sandi. Ganti <oldpassword> dengan kata sandi lama, dan <newpassword> dengan kata sandi baru.

sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>

-Z new_password

Ubah kata sandi dan keluar. Ganti <oldpassword> dengan kata sandi lama, dan <newpassword> dengan kata sandi baru.

sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>

Opsi input dan output

-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]

Menentukan halaman kode input dan output. Nomor codepage adalah nilai numerik yang menentukan halaman kode Windows yang diinstal.

Aturan konversi halaman kode:

  • Jika Anda tidak menentukan halaman kode, sqlcmd menggunakan halaman kode saat ini untuk file input dan output, kecuali file input adalah file Unicode, dalam hal ini tidak diperlukan konversi.

  • sqlcmd secara otomatis mengenali file input Unicode berformat big-endian maupun little-endian. Jika Anda menentukan -u sebagai opsi, outputnya selalu dalam Unicode little-endian.

  • Jika Anda tidak menentukan file output, halaman kode output adalah halaman kode konsol. Pendekatan ini memungkinkan output ditampilkan dengan benar di konsol.

  • Beberapa file input diasumsikan menggunakan halaman kode yang sama. File input Unicode dan non-Unicode dapat dicampur.

Masukkan chcp di prompt perintah untuk memverifikasi halaman kode .cmd.exe

Note

Di Linux, nomor codepage adalah nilai numerik yang menentukan halaman kode Linux yang diinstal (tersedia sejak 17.5.1.1).

-i input_file[,input_file2...]

Mengidentifikasi file yang berisi batch pernyataan Transact-SQL atau prosedur tersimpan. Anda dapat menentukan beberapa file yang dibaca dan diproses sqlcmd secara berurutan. Jangan gunakan spasi apa pun di antara nama file. sqlcmd memeriksa pertama-tama apakah semua file yang ditentukan ada. Jika satu atau beberapa file tidak ada, sqlcmd akan keluar. Opsi -i dan -Q/-q opsinya saling eksklusif.

Note

Jika Anda menggunakan -i opsi diikuti oleh satu atau beberapa parameter tambahan, Anda harus menggunakan spasi antara parameter dan nilai . Persyaratan ini adalah masalah yang diketahui dalam sqlcmd (Go).

Contoh jalur:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

Jalur file yang berisi spasi harus diapit dalam tanda kutip.

Anda dapat menggunakan opsi ini lebih dari sekali:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o output_file

Mengidentifikasi file yang menerima output dari sqlcmd.

Jika Anda menentukan -u, sqlcmd menyimpan output_file dalam format Unicode. Jika nama file tidak valid, sqlcmd menghasilkan pesan kesalahan dan keluar. sqlcmd tidak mendukung penulisan bersamaan dari beberapa proses sqlcmd ke file yang sama. Jika ini terjadi, pertimbangkan output file rusak atau salah. Opsi -f ini juga relevan dengan format file. sqlcmd membuat file ini jika tidak ada. sqlcmd menimpa file dengan nama yang sama dari sesi sebelumnya. File yang ditentukan di sini bukan stdout file. Jika Anda menentukan stdout file, sqlcmd tidak menggunakan file ini.

Contoh jalur:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Jalur file yang berisi spasi harus diapit dalam tanda kutip.

-r[0 | 1]

Mengalihkan output pesan kesalahan ke layar (stderr). Jika Anda tidak menentukan parameter atau jika Anda menentukan 0, hanya pesan kesalahan yang memiliki tingkat keparahan 11 atau lebih tinggi yang dialihkan. Jika Anda menentukan 1, semua output pesan kesalahan termasuk PRINT dialihkan. Opsi ini tidak berpengaruh jika Anda menggunakan -o. Secara default, pesan dikirim ke stdout.

Note

Untuk utilitas sqlcmd (Go), diperlukan argumen -r atau 0.

-R

Berlaku untuk: sqlcmd (ODBC) saja.

Menyebabkan sqlcmd melokalisasi kolom numerik, mata uang, tanggal, dan waktu yang diambil dari SQL Server berdasarkan lokal klien. Secara default, kolom ini ditampilkan menggunakan pengaturan regional server.

Note

Di Linux dan macOS, -R saat ini hanya menggunakan pemformatan Bahasa Inggris AS en_US.

-u

Menentukan bahwa output_file disimpan dalam format Unicode, terlepas dari format input_file.

Note

Untuk utilitas sqlcmd (Go), file output Unicode yang dihasilkan diawali dengan tanda urutan byte (BOM) little-endian UTF-16.

Opsi pelaksanaan kueri

-e

Menulis skrip input ke perangkat output standar (stdout).

-I

Berlaku untuk: sqlcmd (ODBC) saja.

Mengatur opsi koneksi SET QUOTED_IDENTIFIER ke ON. Pengaturan default adalah OFF. Untuk informasi selengkapnya, lihat MENGATUR QUOTED_IDENTIFIER.

Note

Untuk menonaktifkan perilaku pengidentifikasi yang dikutip di utilitas sqlcmd (Go), tambahkan SET QUOTED IDENTIFIER OFF pada skrip Anda.

-q "kueri cmdline"

Menjalankan kueri saat sqlcmd dimulai, tetapi tidak keluar dari sqlcmd saat kueri selesai. Anda dapat menjalankan beberapa kueri yang dibatasi dengan titik koma. Gunakan tanda kutip di sekitar kueri, seperti yang diperlihatkan dalam contoh berikut.

Pada command prompt, ketik:

sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Important

Jangan gunakan terminator GO dalam kueri.

Jika Anda menentukan -b bersama dengan opsi ini, sqlcmd keluar dengan kesalahan. Opsi -b ini dijelaskan di tempat lain dalam artikel ini.

-Q "kueri baris perintah"

Menjalankan kueri ketika sqlcmd dimulai dan kemudian segera keluar dari sqlcmd. Anda dapat menjalankan beberapa kueri yang dibatasi dengan titik koma.

Gunakan tanda kutip di sekitar kueri, seperti yang diperlihatkan dalam contoh berikut.

Pada command prompt, ketik:

sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Important

Jangan gunakan terminator GO dalam kueri.

Jika Anda menentukan -b bersama dengan opsi ini, sqlcmd keluar dengan kesalahan. Opsi -b ini dijelaskan di tempat lain dalam artikel ini.

-t query_timeout

Menentukan jumlah detik sebelum perintah (atau pernyataan Transact-SQL) berakhir waktu. Opsi ini mengatur variabel scripting sqlcmdSQLCMDSTATTIMEOUT. Jika Anda tidak menentukan nilai query_timeout , perintah tidak kehabisan waktu. query_timeout harus berupa angka antara 1 dan 65534. Jika Anda memberikan nilai yang bukan numerik atau tidak termasuk dalam rentang tersebut, sqlcmd menghasilkan kesalahan.

Note

Nilai batas waktu aktual dapat bervariasi dari nilai query_timeout yang ditentukan selama beberapa detik.

-v var = value [ var = value... ]

Berlaku untuk: Hanya Windows. Tidak mendukung Linux dan macOS.

Membuat variabel pembuatan skrip sqlcmd untuk digunakan dalam skrip sqlcmd .

Sertakan nilai dalam tanda kutip jika nilai berisi spasi. Anda dapat menentukan beberapa <var>="<value>" nilai. Jika salah satu nilai yang Anda tentukan berisi kesalahan, sqlcmd menghasilkan pesan kesalahan lalu keluar.

sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"

-x

Menyebabkan sqlcmd mengabaikan variabel pembuatan skrip. Parameter ini berguna ketika skrip berisi banyak pernyataan INSERT yang mungkin berisi string yang memiliki format yang sama dengan variabel reguler, seperti $(<variable_name>).

Opsi format

-h header

Menentukan jumlah baris yang akan dicetak di antara judul kolom. Pengaturan default mencetak judul sekali untuk setiap set hasil kueri. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDHEADERS. Gunakan -1 untuk menentukan bahwa header tidak dicetak. Nilai yang tidak valid menyebabkan sqlcmd menghasilkan pesan kesalahan lalu keluar.

-k [1 | 2]

Menghapus semua karakter kontrol, seperti tab dan karakter baris baru dari output. Parameter ini mempertahankan pemformatan kolom saat data dikembalikan.

  • -k menghapus karakter kontrol.
  • -k1 mengganti setiap karakter kontrol dengan spasi.
  • -k2 mengganti karakter kontrol berturut-turut dengan satu spasi.

-s col_separator

Menentukan karakter pemisah kolom. Defaultnya adalah spasi kosong. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDCOLSEP. Untuk menggunakan karakter yang memiliki arti khusus untuk sistem operasi, seperti ampersand (&) atau titik koma (;), sertakan karakter dalam tanda kutip ("). Pemisah kolom dapat berupa karakter 8-bit apa pun.

-w screen_width

Menentukan lebar layar untuk output. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDCOLWIDTH. Lebar kolom harus angka yang lebih besar dari 8 dan kurang dari 65536. Jika lebar kolom yang ditentukan tidak termasuk dalam rentang tersebut, sqlcmd menghasilkan pesan kesalahan. Lebar default adalah 80 karakter. Ketika baris output melebihi lebar kolom yang ditentukan, garis tersebut akan dibungkus ke baris berikutnya.

-W

Menghapus spasi di akhir dari kolom. Gunakan opsi ini bersama dengan -s opsi saat menyiapkan data yang ingin Anda ekspor ke aplikasi lain. Tidak dapat digunakan dengan opsi -y atau -Y.

-y lebar_tampilan_tipe_panjang_variabel

Menetapkan variabel pemrograman `sqlcmd`. Nilai defaultnya adalah 256. Ini membatasi jumlah karakter yang dikembalikan untuk jenis data panjang variabel besar:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • jenis data yang ditentukan pengguna (UDT)
  • text
  • ntext
  • image

UDT dapat memiliki panjang tetap tergantung pada implementasinya. Jika panjang UDT dengan panjang tetap ini lebih pendek dari display_width, nilai UDT yang dikembalikan tidak terpengaruh. Namun, jika panjangnya lebih panjang dari display_width, output dipotong.

Caution

-y 0 Gunakan opsi dengan sangat hati-hati, karena dapat menyebabkan masalah performa yang signifikan pada server dan jaringan, tergantung pada ukuran data yang dikembalikan.

-Y lebar_tampilan_jenis_panjang_tetap

Menetapkan variabel pemrograman `sqlcmd`. Nilai defaultnya adalah 0 (tidak terbatas). Membatasi jumlah karakter yang dikembalikan untuk jenis data berikut:

  • char(n), di mana 1 <= n<= 8000
  • nchar(n), di mana 1 <= n<= 4000
  • varchar(n), di mana 1 <= n<= 8000
  • nvarchar(n), di mana 1 <= n<= 4000
  • varbinary(n), di mana 1 <= n<= 4000
  • sql_variant

Opsi pelaporan kesalahan

-b

Menentukan bahwa sqlcmd keluar dan mengembalikan DOS ERRORLEVEL nilai saat terjadi kesalahan. Nilai yang dikembalikan sqlcmd ke ERRORLEVEL variabel adalah 1 ketika pesan kesalahan SQL Server memiliki tingkat keparahan yang lebih besar dari 10. Jika tidak, nilai yang dikembalikan adalah 0. Jika Anda mengatur -V opsi , selain -b, sqlcmd tidak melaporkan kesalahan jika tingkat keparahan lebih rendah dari nilai yang ditetapkan oleh -V opsi . File batch prompt perintah dapat menguji nilai ERRORLEVEL dan menangani kesalahan dengan tepat. sqlcmd tidak melaporkan kesalahan untuk tingkat keparahan 10 (pesan informasi).

Jika skrip sqlcmd berisi komentar yang salah, kesalahan sintaks, atau tidak memiliki variabel pembuatan skrip, yang ERRORLEVEL dikembalikan adalah 1.

-m error_level

Mengontrol pesan kesalahan mana yang dikirim ke stdout. sqlcmd mengirim pesan yang memiliki tingkat keparahan lebih besar dari atau sama dengan tingkat ini. Ketika Anda mengatur nilai ini ke -1, sqlcmd mengirim semua pesan, termasuk pesan informasi. Jangan sertakan spasi antara tag -m dan -1. Misalnya, -m-1 valid, dan -m -1 tidak.

Opsi ini juga mengatur variabel skrip sqlcmdSQLCMDERRORLEVEL. Variabel ini memiliki nilai default 0.

- V error_severity_level

Mengontrol tingkat keparahan yang digunakan sqlcmd untuk mengatur ERRORLEVEL variabel. Pesan kesalahan yang memiliki tingkat keparahan lebih besar dari atau sama dengan set ERRORLEVELnilai ini . Nilai yang kurang dari 0 dilaporkan sebagai 0. Anda dapat menggunakan file batch dan CMD untuk menguji nilai ERRORLEVEL variabel.

Opsi lain-lain

-a packet_size

Meminta paket dengan ukuran yang berbeda. Opsi ini mengatur variabel pemrograman sqlcmdSQLCMDPACKETSIZE. packet_size harus berupa nilai antara 512 dan 32767. Default adalah 4096. Ukuran paket yang lebih besar dapat meningkatkan performa untuk eksekusi skrip yang memiliki banyak pernyataan Transact-SQL antar GO perintah. Anda dapat meminta ukuran paket yang lebih besar. Namun, jika permintaan ditolak, sqlcmd menggunakan default server untuk ukuran paket.

-c batch_terminator

Menentukan penanda akhir batch. Secara default, Anda harus mengakhiri perintah dan mengirimkannya ke SQL Server menggunakan kata GO pada baris itu sendiri, diikuti oleh Enter. Saat Anda mengatur kembali terminator batch, jangan gunakan kata kunci atau karakter yang merupakan cadangan Transact-SQL yang memiliki arti khusus untuk sistem operasi, bahkan jika diawali oleh garis miring terbalik.

-L[c]

Berlaku untuk: Hanya Windows. Tidak mendukung Linux dan macOS.

Mencantumkan komputer server yang dikonfigurasi secara lokal, dan nama komputer server yang disiarkan di jaringan. Anda tidak dapat menggunakan parameter ini dalam kombinasi dengan parameter lain. Jumlah maksimum komputer server yang dapat dicantumkan adalah 3.000. Jika daftar server dipotong karena ukuran buffer, pesan peringatan ditampilkan.

Note

Karena sifat penyiaran di jaringan, sqlcmd mungkin tidak menerima respons tepat waktu dari semua server. Oleh karena itu, daftar server yang dikembalikan dapat bervariasi untuk setiap pemanggilan opsi ini.

Jika Anda menentukan parameter c opsional, output muncul tanpa Servers: baris header, dan setiap baris server dicantumkan tanpa spasi di depannya. Presentasi ini disebut sebagai output bersih. Hasil keluaran yang bersih meningkatkan performa pemrosesan bahasa skrip.

-p[1]

Mencetak statistik kinerja untuk setiap set hasil. Tampilan berikut adalah contoh format untuk statistik performa:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Where:

  • x = Jumlah transaksi yang diproses oleh SQL Server.
  • t1 = Total waktu untuk semua transaksi.
  • t2 = Waktu rata-rata untuk satu transaksi.
  • t3 = Jumlah rata-rata transaksi per detik.

Semua waktu dalam milidetik.

Jika Anda menentukan parameter opsional 1, format output statistik berformat pemisahan titik dua yang dapat diimpor dengan mudah ke spreadsheet atau diproses skrip.

Jika Anda menentukan parameter opsional sebagai nilai apa pun selain 1, kesalahan dihasilkan dan sqlcmd keluar.

-X[1]

Menonaktifkan perintah yang mungkin membahayakan keamanan sistem saat sqlcmd dijalankan dari file batch. Perintah yang dinonaktifkan masih dikenali; sqlcmd mengeluarkan pesan peringatan dan berlanjut. Jika Anda menentukan parameter 1opsional , sqlcmd menghasilkan pesan kesalahan lalu keluar. Perintah berikut dinonaktifkan saat -X opsi digunakan:

  • ED
  • !! perintah

Jika Anda menentukan -X opsi , itu mencegah variabel lingkungan diteruskan ke sqlcmd. Ini juga mencegah skrip startup yang ditentukan dengan menggunakan SQLCMDINI variabel scripting agar tidak dijalankan. Untuk informasi selengkapnya tentang variabel pembuatan skrip sqlcmd , lihat sqlcmd - Gunakan dengan variabel pembuatan skrip.

-?

Menampilkan versi sqlcmd dan ringkasan sintaks opsi sqlcmd .

Note

Di macOS, jalankan sqlcmd '-?' (dengan tanda kutip) sebagai gantinya.

Remarks

Anda tidak perlu menggunakan opsi dalam urutan yang diperlihatkan di bagian sintaks.

Note

Jika Anda menggunakan -i opsi diikuti oleh satu atau beberapa parameter tambahan, Anda harus menggunakan spasi antara parameter dan nilai . Persyaratan ini adalah masalah yang diketahui dalam sqlcmd (Go).

sqlcmd mencetak baris kosong di antara beberapa tataan hasil dalam batch. Selain itu, <x> rows affected pesan tidak muncul saat tidak berlaku untuk pernyataan yang sedang berjalan.

Untuk menggunakan sqlcmd secara interaktif, ketik sqlcmd prompt perintah dengan satu atau beberapa opsi yang dijelaskan sebelumnya dalam artikel ini. Untuk informasi selengkapnya, lihat Menggunakan sqlcmd.

Note

Opsi -l, -Q, -Z, atau -i menyebabkan sqlcmd keluar setelah eksekusi.

Sistem operasi yang mendasar menentukan panjang total baris perintah sqlcmd di lingkungan perintah (misalnya, cmd.exe atau bash), termasuk semua argumen dan variabel yang diperluas.

Dukungan DSN dalam sqlcmd dan bcp

Anda dapat menentukan nama sumber data (DSN) alih-alih nama server di sqlcmd atau bcp -S opsi (atau sqlcmd :Connect perintah) jika Anda menentukan -D. Jika Anda menggunakan -D opsi , sqlcmd dan bcp terhubung ke server yang ditentukan dalam DSN dengan -S opsi .

DSN sistem disimpan dalam odbc.ini file di direktori ODBC SysConfigDir (/etc/odbc.ini pada penginstalan standar). DSN pengguna disimpan di .odbc.ini direktori beranda pengguna (~/.odbc.ini).

Pada sistem Windows, DSN Sistem dan Pengguna disimpan dalam registri dan dikelola melalui odbcad32.exe. bcp dan sqlcmd tidak mendukung DSN file.

Untuk daftar entri yang didukung driver, lihat DSN dan Kata Kunci dan Atribut String Koneksi.

Dalam DSN, hanya entri DRIVER yang diperlukan. Untuk menyambungkan ke server jarak jauh, sqlcmd atau bcp memerlukan nilai dalam SERVER elemen . SERVER Jika elemen kosong atau tidak ada di DSN, sqlcmd atau bcp mencoba menyambungkan ke instans default pada sistem lokal.

Saat Anda menggunakan bcp pada sistem Windows, SQL Server 2017 (14.x) dan versi yang lebih lama memerlukan driver SQL Native Client 11 (sqlncli11.dll), sementara SQL Server 2019 (15.x) dan versi yang lebih baru memerlukan Driver Microsoft ODBC 17 untuk driver SQL Server (msodbcsql17.dll).

Jika Anda menentukan opsi yang sama di baris perintah DSN dan sqlcmd atau bcp , opsi baris perintah akan mengambil alih nilai yang digunakan dalam DSN. Misalnya, jika DSN memiliki DATABASE entri dan baris perintah sqlcmd menyertakan -d, nilai yang diteruskan ke -d digunakan. Jika Anda menentukan Trusted_Connection=yes di DSN, autentikasi Kerberos digunakan; nama pengguna (-U) dan kata sandi (-P), jika disediakan, diabaikan.

Anda dapat memodifikasi skrip yang ada yang memanggil isql untuk menggunakan sqlcmd, dengan menentukan alias berikut: alias isql="sqlcmd -D".

praktik terbaik sqlcmd

Gunakan praktik berikut untuk membantu memaksimalkan keamanan dan efisiensi:

  • Gunakan Keamanan Terpadu.

  • Gunakan -X[1] di lingkungan otomatis.

  • Amankan file input dan output dengan menggunakan izin sistem file yang sesuai.

  • Untuk meningkatkan performa, lakukan sebanyak mungkin dalam satu sesi sqlcmd , alih-alih menggunakan serangkaian sesi.

  • Atur nilai batas waktu untuk batch atau eksekusi kueri yang lebih tinggi dari waktu eksekusi yang diharapkan untuk batch atau kueri.

Gunakan praktik berikut untuk membantu memaksimalkan kebenaran:

  • Gunakan -V 16 untuk mencatat pesan keparahan tingkat 16 apa pun. Pesan tingkat keparahan 16 menunjukkan kesalahan umum yang dapat Anda koreksi.

  • Periksa kode keluar dan variabel DOS ERRORLEVEL setelah proses selesai. sqlcmd kembali 0 secara normal. Jika tidak, menetapkan ERRORLEVEL seperti yang dikonfigurasi oleh -V. Dengan kata lain, jangan berharap ERRORLEVEL menjadi nilai yang sama dengan nomor kesalahan yang dilaporkan dari SQL Server. Nomor kesalahan adalah nilai khusus SQL Server yang sesuai dengan fungsi sistem @@ERROR. ERRORLEVEL adalah nilai khusus sqlcmd untuk menunjukkan mengapa sqlcmd dihentikan. Nilainya dipengaruhi oleh menentukan -b parameter .

Menggunakan -V 16 dalam kombinasi dengan memeriksa kode keluar dan DOS ERRORLEVEL dapat membantu menangkap kesalahan di lingkungan otomatis, terutama gerbang kualitas sebelum rilis produksi.