Bagikan melalui


Menggunakan Utilitas sqlcmd

Utilitas sqlcmd adalah utilitas baris perintah untuk ad hoc, eksekusi interaktif pernyataan dan skrip Transact-SQL dan untuk mengotomatiskan tugas pembuatan skrip Transact-SQL. Untuk menggunakan sqlcmd secara interaktif, atau untuk membuat file skrip yang akan dijalankan menggunakan sqlcmd, pengguna harus memahami Transact-SQL. sqlcmd Utilitas biasanya digunakan dengan cara berikut:

  • Pengguna memasukkan pernyataan Transact-SQL secara interaktif dengan cara yang serupa ketika bekerja di terminal perintah. Hasilnya ditampilkan di jendela perintah. Untuk membuka jendela Prompt Perintah, klik Mulai, klik Semua Program, arahkan ke Aksesori, lalu klik Prompt Perintah. Pada prompt perintah, ketik sqlcmd diikuti dengan daftar opsi yang Anda inginkan. Untuk daftar lengkap opsi yang didukung oleh sqlcmd, lihat Utilitas sqlcmd.

  • Pengguna mengirimkan sqlcmd pekerjaan baik dengan menentukan satu pernyataan Transact-SQL untuk dijalankan, atau dengan mengarahkan utilitas ke file teks yang berisi pernyataan Transact-SQL untuk dijalankan. Output biasanya diarahkan ke file teks, tetapi juga dapat ditampilkan di prompt perintah.

  • Mode SQLCMD di Editor Kueri SQL Server Management Studio.

  • Objek Manajemen SQL Server (SMO)

  • Pekerjaan-pekerjaan dari SQL Server Agent CmdExec.

Opsi sqlcmd yang Biasanya Digunakan

Opsi berikut paling sering digunakan:

  • Opsi server (-S) yang mengidentifikasi instans Microsoft SQL Server yang sqlcmd tersambung.

  • Opsi autentikasi (-E, -U, dan -P) yang menentukan kredensial yang sqlcmd menggunakan untuk menyambungkan ke instans SQL Server.

    Nota

    Opsi -E adalah default dan tidak harus ditentukan.

  • Opsi input (-Q, -q, dan -i) yang mengidentifikasi lokasi input ke sqlcmd.

  • Opsi output (-o) yang menentukan file yang sqlcmd akan menempatkan outputnya.

Menyambungkan ke Utilitas sqlcmd

Berikut ini adalah penggunaan yang umum dari utilitas sqlcmd:

  • Menyambungkan ke instans default dengan menggunakan Autentikasi Windows untuk menjalankan pernyataan Transact-SQL secara interaktif:

    sqlcmd -S <ComputerName>  
    

    Nota

    Dalam contoh sebelumnya, -E tidak ditentukan karena merupakan default dan sqlcmd terhubung ke instans default dengan menggunakan Autentikasi Windows.

  • Menyambungkan ke instans bernama dengan menggunakan Autentikasi Windows untuk menjalankan pernyataan Transact-SQL secara interaktif:

    sqlcmd -S <ComputerName>\<InstanceName>  
    

    atau

    sqlcmd -S .\<InstanceName>  
    
  • Menyambungkan ke instans bernama dengan menggunakan Autentikasi Windows dan menentukan file input dan output:

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>  
    
  • Menyambungkan ke instans bawaan di komputer lokal dengan menggunakan Autentikasi Windows, menjalankan kueri, dan memastikan sqlcmd tetap berjalan setelah kueri selesai dijalankan.

    sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"  
    
  • Menyambungkan ke instans default di komputer lokal dengan menggunakan Autentikasi Windows, menjalankan kueri, mengarahkan output ke file, dan keluar sqlcmd setelah kueri selesai berjalan:

    sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • Menyambungkan ke instans bernama menggunakan Autentikasi SQL Server untuk menjalankan pernyataan Transact-SQL secara interaktif, dengan sqlcmd meminta kata sandi:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    Nota

    Untuk melihat daftar opsi yang didukung, jalankan utilitas sqlcmd dengan menggunakan: sqlcmd -?.

Menjalankan Pernyataan Transact-SQL Secara Interaktif dengan Menggunakan sqlcmd

Anda dapat menggunakan sqlcmd utilitas secara interaktif untuk menjalankan pernyataan Transact-SQL di jendela Prompt Perintah. Untuk menjalankan pernyataan Transact-SQL secara interaktif dengan menggunakan sqlcmd, jalankan utilitas tanpa menggunakan opsi -Q, -q, -Z, atau -i untuk menentukan file input atau kueri apa pun. Contohnya:

sqlcmd -S <ComputerName>\<InstanceName>

Ketika perintah dijalankan tanpa file input atau kueri, sqlcmd terhubung ke instans SQL Server yang ditentukan lalu menampilkan baris baru dengan 1> diikuti oleh garis bawah berkedip yang diberi nama sqlcmd prompt. Menandakan 1 bahwa ini adalah baris pertama dari pernyataan Transact-SQL, dan sqlcmd prompt adalah titik di mana pernyataan Transact-SQL akan dimulai ketika Anda mengetikkannya.

sqlcmd Pada perintah, Anda dapat mengetikkan pernyataan dan sqlcmd perintah Transact-SQL, seperti GO dan EXIT. Setiap pernyataan Transact-SQL dimasukkan ke dalam buffer yang disebut cache pernyataan. Pernyataan ini dikirim ke SQL Server setelah Anda mengetik GO perintah dan menekan ENTER. Untuk keluar sqlcmd, ketik EXIT atau QUIT di awal baris baru.

Untuk menghapus cache pernyataan, ketik :RESET. Mengetik ^C menyebabkan sqlcmd keluar. ^C juga dapat digunakan untuk menghentikan eksekusi cache pernyataan setelah GO perintah dikeluarkan.

Transact-SQL pernyataan yang dimasukkan dalam sesi interaktif dapat diedit dengan memasukkan perintah :ED dan sqlcmd prompt. Editor akan terbuka dan, setelah mengedit pernyataan Transact-SQL dan menutup editor, pernyataan Transact-SQL yang direvisi akan muncul di jendela perintah. Masukkan GO untuk menjalankan pernyataan Transact-SQL yang telah diperbarui.

String yang Dikutip

Karakter yang diapit dalam tanda kutip digunakan tanpa pra-pemrosesan tambahan, kecuali bahwa tanda kutip dapat dimasukkan ke dalam string dengan memasukkan dua tanda kutip berturut-turut. SQL Server memperlakukan urutan karakter ini sebagai satu tanda kutip. (Namun, terjemahan terjadi di server.) Variabel pembuatan skrip tidak akan diperluas saat muncul dalam string.

Contohnya:

sqlcmd

PRINT "Length: 5"" 7'";

GO

Berikut adalah hasilnya.

Length: 5" 7'

String yang Mencakup Beberapa Baris

sqlcmd mendukung skrip yang memiliki string yang mencakup beberapa baris. Misalnya, pernyataan berikut mencakup SELECT beberapa baris tetapi merupakan string tunggal yang dijalankan saat Anda menekan tombol ENTER setelah mengetik GO.

SELECT First line

FROM Second line

WHERE Third line;

GO

Contoh sqlcmd interaktif

Ini adalah contoh apa yang Anda lihat saat Anda menjalankan sqlcmd secara interaktif.

Saat Anda membuka jendela Prompt Perintah, ada satu baris yang mirip dengan:

C:\> _

Ini berarti folder C:\ adalah folder saat ini, dan jika Anda menentukan nama file, Windows akan mencari file di folder tersebut.

Ketik sqlcmd untuk menyambungkan ke instans default SQL Server di komputer lokal, dan konten jendela Prompt Perintah adalah:

C:\>sqlcmd

1> _

Ini berarti Anda telah terhubung ke instans SQL Server dan sqlcmd sekarang siap untuk menerima Transact-SQL pernyataan dan sqlcmd perintah-perintah. Garis bawah berkedip setelah 1> adalah tanda perintah sqlcmd yang menunjukkan lokasi di mana instruksi dan perintah yang Anda ketik akan ditampilkan. Sekarang, ketik USE AdventureWorks2012 dan tekan ENTER, lalu ketik GO dan tekan ENTER. Isi jendela Command Prompt adalah:

sqlcmd

USE AdventureWorks2012;

GO

Berikut adalah hasilnya.

Changed database context to 'AdventureWorks2012'.

1> _

Menekan ENTER setelah memasukkan USE AdventureWorks2012 menandakan sqlcmd untuk memulai baris baru. Menekan ENTER menandakan sqlcmd untuk mengirim pernyataan USE AdventureWorks2012 ke instans SQL Server setelah Anda mengetik GO,. sqlcmd kemudian mengembalikan pesan untuk menunjukkan bahwa USE pernyataan berhasil diselesaikan dan menampilkan perintah baru 1> sebagai sinyal untuk memasukkan pernyataan atau perintah baru.

Contoh berikut menunjukkan apa yang dimuat dalam jendela Command Prompt jika Anda mengetik pernyataan SELECT, GO untuk menjalankan SELECT, dan EXIT untuk keluar dari sqlcmd:

sqlcmd

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Berikut adalah hasilnya.

BusinessEntityID FirstName LastName

----------- -------------------------------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

1> EXIT

C:\>

Baris demi baris 3> GO adalah output dari SELECT pernyataan. Setelah Anda menghasilkan output, sqlcmd mereset perintah sqlcmd dan menampilkan 1>. Setelah memasukkan EXIT di baris 1>, jendela Prompt Perintah menampilkan baris yang sama dengan yang dilakukannya ketika Anda pertama kali membukanya. Ini menunjukkan bahwa sqlcmd telah keluar dari sesinya. Sekarang Anda dapat menutup jendela Prompt Perintah dengan mengetik perintah lain EXIT .

Menjalankan File Skrip Transact-SQL dengan Menggunakan sqlcmd

Anda dapat menggunakan sqlcmd untuk menjalankan file skrip database. File skrip adalah file teks yang berisi campuran pernyataan Transact-SQL, sqlcmd perintah, dan variabel pembuatan skrip. Untuk informasi selengkapnya tentang cara menggunakan variabel skrip, lihat Menggunakan sqlcmd dengan Variabel Skrip. sqlcmd bekerja dengan pernyataan, perintah, dan variabel pembuatan skrip dalam file skrip dengan cara yang mirip dengan cara kerjanya dengan pernyataan dan perintah yang dimasukkan secara interaktif. Perbedaan utamanya adalah membaca sqlcmd file input tanpa jeda alih-alih menunggu pengguna memasukkan pernyataan, perintah, dan variabel pembuatan skrip.

Ada berbagai cara untuk membuat file skrip database:

  • Anda dapat membuat dan men-debug sekumpulan pernyataan Transact-SQL secara interaktif di SQL Server Management Studio, lalu menyimpan konten jendela Kueri sebagai file skrip.

  • Anda dapat membuat file teks yang berisi pernyataan Transact-SQL dengan menggunakan editor teks, seperti Notepad.

Contoh

Sebuah. Menjalankan skrip dengan menggunakan sqlcmd

Mulai Notepad, dan ketik pernyataan Transact-SQL berikut:

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

Buat folder bernama MyFolder lalu simpan skrip sebagai file MyScript.sql di folder C:\MyFolder. Masukkan yang berikut ini di prompt perintah untuk menjalankan skrip dan letakkan output di MyOutput.txt dalam MyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Saat Anda melihat konten MyOutput.txt di Notepad, Anda akan melihat hal berikut:

Changed database context to 'AdventureWorks2012'.

BusinessEntityID FirstName LastName

---------------- ----------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

B. Menggunakan sqlcmd dengan koneksi administratif khusus

Dalam contoh berikut, sqlcmd digunakan untuk menyambungkan ke server yang memiliki masalah pemblokiran dengan menggunakan koneksi administrator khusus (DAC).

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

Berikut adalah hasilnya.

spid blocked

------ -------

62 64

(1 rows affected)

Gunakan sqlcmd untuk mengakhiri proses pemblokiran.

1> KILL 64;

2> GO

C. Menggunakan sqlcmd untuk menjalankan prosedur tersimpan

Contoh berikut menunjukkan cara menjalankan prosedur tersimpan dengan menggunakan sqlcmd. Buat prosedur tersimpan berikut ini.

USE AdventureWorks2012;

IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL

DROP PROCEDURE dbo.ContactEmailAddress;

GO

CREATE PROCEDURE dbo.ContactEmailAddress

(

@FirstName nvarchar(50)

,@LastName nvarchar(50)

)

AS

SET NOCOUNT ON

SELECT EmailAddress

FROM Person.Person

WHERE FirstName = @FirstName

AND LastName = @LastName;

SET NOCOUNT OFF

Pada prompt sqlcmd, masukkan yang berikut:

C:\sqlcmd

1> :Setvar FirstName Gustavo

1> :Setvar LastName Achong

1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)

2> GO

EmailAddress

-----------------------------

gustavo0@adventure-works.com

D. Menggunakan sqlcmd untuk pemeliharaan database

Contoh berikut menunjukkan cara menggunakan sqlcmd untuk tugas pemeliharaan database. Buat C:\BackupTemplate.sql dengan kode berikut.

USE master;

BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

Pada prompt sqlcmd, masukkan yang berikut:

C:\ >sqlcmd

1> :connect <server>

Sqlcmd: Successfully connected to server <server>.

1> :setvar db msdb

1> :setvar bakfile c:\msdb.bak

1> :r c:\BackupTemplate.sql

2> GO

Changed database context to 'master'.

Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.

Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.

BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E. Menggunakan sqlcmd untuk menjalankan kode pada beberapa instans

Kode berikut dalam file menunjukkan skrip yang tersambung ke dua instans. Perhatikan GO sebelum koneksi ke instans kedua.

:CONNECT <server>\,<instance1>

EXEC dbo.SomeProcedure

GO

:CONNECT <server>\,<instance2>

EXEC dbo.SomeProcedure

GO

E. Mengembalikan output XML

Contoh berikut menunjukkan bagaimana output XML dikembalikan tidak diformat, dalam aliran berkelanjutan.

C:\>sqlcmd -d AdventureWorks2012

1> :XML ON

1> SELECT TOP 3 FirstName + ' ' + LastName + ', '

2> FROM Person.Person

3> GO

Syed Abbas, Catherine Abel, Kim Abercrombie,

F. Menggunakan sqlcmd dalam file skrip Windows

sqlcmdPerintah seperti sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, dapat dijalankan dalam file .bat bersama dengan VBScript. Dalam hal ini, jangan gunakan opsi interaktif. sqlcmd harus diinstal pada komputer yang menjalankan file .bat.

Pertama, buat empat file berikut:

  • C:\badscript.sql

    SELECT batch_1_this_is_an_error  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\goodscript.sql

    SELECT 'batch #1'  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\returnvalue.sql

    :exit(select 100)  
    @echo off  
    C:\windowsscript.bat  
    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    
  • C:\windowsscript.bat

    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    

Kemudian, pada prompt perintah, jalankan C:\windowsscript.bat:

C:\>windowsscript.bat

Running badscript.sql

== An error occurred

Running goodscript.sql

Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. Menggunakan sqlcmd untuk mengatur enkripsi di Azure SQL Database

sqlcmdDapat dijalankan pada koneksi ke data SQL Database untuk menentukan enkripsi dan kepercayaan sertifikat. Tersedia dua opsi 'sqlcmd''':

  • Sakelar -N digunakan oleh klien untuk meminta koneksi terenkripsi. Opsi ini setara dengan opsi ENCRYPT = trueADO.net .

  • Sakelar -C digunakan oleh klien untuk mengonfigurasinya agar mempercayai sertifikat server secara implisit dan tidak memvalidasinya. Opsi ini setara dengan opsi TRUSTSERVERCERTIFICATE = trueADO.net .

Layanan SQL Database tidak mendukung semua opsi yang SET tersedia pada instans SQL Server. Opsi berikut menghasilkan kesalahan ketika opsi SET diatur ke ON atau OFF:

  • SET ANSI_DEFAULTS

  • SET ANSI_NULLS

  • Atur Transaksi Prosedur Jarak Jauh

  • SET ANSI_NULL_DEFAULT

Opsi SET berikut tidak melemparkan pengecualian tetapi tidak dapat digunakan. Mereka tidak digunakan lagi:

  • SET CONCAT_NULL_YIELDS_NULL

  • SET ANSI_PADDING

  • SET QUERY_GOVERNOR_COST_LIMIT

Sintaksis

Contoh berikut mengacu pada kasus di mana pengaturan Penyedia Klien Asli SQL Server meliputi: ForceProtocolEncryption = False, Trust Server Certificate = No

Sambungkan menggunakan kredensial Windows dan enkripsi komunikasi:

SQLCMD -E -N  
  

Sambungkan menggunakan kredensial Windows dan sertifikat server kepercayaan:

SQLCMD -E -C  
  

Sambungkan menggunakan kredensial Windows, enkripsi komunikasi, dan sertifikat server kepercayaan:

SQLCMD -E -N -C  
  

Contoh berikut mengacu pada kasus di mana pengaturan Penyedia Klien Asli SQL Server meliputi: ForceProtocolEncryption = True, TrustServerCertificate = Yes.

Sambungkan menggunakan kredensial Windows, enkripsi komunikasi, dan sertifikat server kepercayaan:

SQLCMD -E  
  

Sambungkan menggunakan kredensial Windows, enkripsi komunikasi, dan sertifikat server kepercayaan:

SQLCMD -E -N  
  

Sambungkan menggunakan kredensial Windows, enkripsi komunikasi, dan sertifikat server kepercayaan:

SQLCMD -E -T  
  

Sambungkan menggunakan kredensial Windows, enkripsi komunikasi, dan sertifikat server kepercayaan:

SQLCMD -E -N -C  
  

Jika penyedia menentukan ForceProtocolEncryption = True, maka enkripsi diaktifkan bahkan jika Encrypt=No ada dalam string koneksi.

Lihat Juga

Utilitas sqlcmd
Menggunakan sqlcmd dengan Variabel Pembuatan Skrip
Edit Skrip SQLCMD dengan Editor Kueri
Mengelola Langkah-langkah Pekerjaan
Membuat Tahap Tugas CmdExec