Utilitas osql

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Utilitas osql memungkinkan Anda memasukkan pernyataan Transact-SQL, prosedur sistem, dan file skrip. Utilitas ini menggunakan ODBC untuk berkomunikasi dengan server.

Penting

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur tersebut. Gunakan sqlcmd sebagai gantinya. Untuk informasi selengkapnya, lihat Utilitas sqlcmd.

Sintaks

  
osql  
[-?] |  
[-L] |  
[  
  {  
     {-Ulogin_id [-Ppassword]} | -E }  
     [-Sserver_name[\instance_name]] [-Hwksta_name] [-ddb_name]  
     [-ltime_out] [-ttime_out] [-hheaders]  
     [-scol_separator] [-wcolumn_width] [-apacket_size]  
     [-e] [-I] [-D data_source_name]  
     [-ccmd_end] [-q "query"] [-Q"query"]  
     [-n] [-merror_level] [-r {0 | 1}]  
     [-iinput_file] [-ooutput_file] [-p]  
     [-b] [-u] [-R] [-O]  
]  

Argumen

-?
Menampilkan ringkasan sintaks sakelar osql .

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

Catatan

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

-Ulogin_id
Adalah ID masuk pengguna. ID login peka huruf besar/kecil.

Kata sandi -P
Adalah kata sandi yang ditentukan pengguna. Jika opsi -P tidak digunakan, osql meminta kata sandi. Jika opsi -P digunakan di akhir prompt perintah tanpa kata sandi apa pun, osql menggunakan kata sandi default (NULL).

Penting

Jangan gunakan kata sandi kosong. Gunakan kata sandi yang kuat. Untuk mengetahui informasi selengkapnya, lihat Kata Sandi Yang Kuat.

Kata sandi peka huruf besar/kecil.

Variabel lingkungan OSQLPASSWORD memungkinkan Anda mengatur kata sandi default untuk sesi saat ini. Oleh karena itu, Anda tidak perlu mengkodekan kata sandi secara permanen ke dalam file batch.

Jika Anda tidak menentukan kata sandi dengan opsi -P , osql terlebih dahulu memeriksa variabel OSQLPASSWORD. Jika tidak ada nilai yang diatur, osql menggunakan kata sandi default, NULL. Contoh berikut mengatur variabel OSQLPASSWORD pada prompt perintah lalu mengakses utilitas osql :

C:\>SET OSQLPASSWORD=abracadabra  
C:\>osql   

Penting

Untuk menutupi kata sandi Anda, jangan tentukan opsi -P bersama dengan opsi -U . Sebagai gantinya, setelah menentukan osql bersama dengan opsi -U dan sakelar lain (jangan tentukan -P), tekan ENTER, dan osql akan meminta kata sandi. Metode ini memastikan bahwa kata sandi Anda akan ditutupi saat dimasukkan.

-E
Menggunakan koneksi tepercaya alih-alih meminta kata sandi.

-Sserver_name[ \instance_name]
Menentukan instans SQL Server yang akan disambungkan. Tentukan server_name untuk menyambungkan ke instans default SQL Server di server tersebut. Tentukan server_name\instance_name untuk menyambungkan ke instans SQL Server bernama di server tersebut. Jika tidak ada server yang ditentukan, osql tersambung ke instans default SQL Server di komputer lokal. Opsi ini diperlukan saat menjalankan osql dari komputer jarak jauh pada jaringan.

-Hwksta_name
Adalah nama stasiun kerja. Nama stasiun kerja disimpan dalam sysprocesses.hostname dan ditampilkan oleh sp_who. Jika opsi ini tidak ditentukan, nama komputer saat ini diasumsikan.

-ddb_name
Mengeluarkan pernyataan DB_NAME USE saat osqldimulai.

- Akutime_out
Menentukan jumlah detik sebelum waktu masuk osql habis. Batas waktu default untuk masuk ke osql adalah delapan detik.

-ttime_out
Menentukan jumlah detik sebelum perintah habis. Jika nilai time_out tidak ditentukan, perintah tidak kehabisan waktu.

Header -h
Menentukan jumlah baris yang akan dicetak di antara judul kolom. Defaultnya adalah mencetak judul satu kali untuk setiap set hasil kueri. Gunakan -1 untuk menentukan bahwa tidak ada header yang akan dicetak. Jika -1 digunakan, tidak boleh ada spasi antara parameter dan pengaturan (-h-1, bukan -h -1).

-scol_separator
Menentukan karakter pemisah kolom, yang merupakan spasi kosong secara default. Untuk menggunakan karakter yang memiliki arti khusus untuk sistem operasi (misalnya, | ; & <>), sertakan karakter dalam tanda kutip ganda (").

-wcolumn_width
Memungkinkan pengguna untuk mengatur lebar layar untuk output. Defaultnya adalah 80 karakter. Ketika garis output telah mencapai lebar layar maksimumnya, garis tersebut dipecah menjadi beberapa garis.

-apacket_size
Memungkinkan Anda meminta paket berukuran berbeda. Nilai yang valid untuk packet_size adalah 512 hingga 65535. Nilai default osql adalah default server. Peningkatan ukuran paket dapat meningkatkan performa pada eksekusi skrip yang lebih besar di mana jumlah pernyataan SQL antara perintah GO bersifat substansial. Pengujian Microsoft menunjukkan bahwa 8192 biasanya merupakan pengaturan tercepat untuk operasi penyalinan massal. Ukuran paket yang lebih besar dapat diminta, tetapi osql default ke default server jika permintaan tidak dapat diberikan.

-E
Menggemakan input.

-I
Mengatur opsi koneksi QUOTED_IDENTIFIER aktif.

-Ddata_source_name
Koneksi ke sumber data ODBC yang ditentukan menggunakan driver ODBC untuk SQL Server. Koneksi osql menggunakan opsi yang ditentukan dalam sumber data.

Catatan

Opsi ini tidak berfungsi dengan sumber data yang ditentukan untuk driver lain.

-ccmd_end
Menentukan terminator perintah. Secara default, perintah dihentikan dan dikirim ke SQL Server dengan memasukkan GO pada baris itu sendiri. Saat Anda mengatur ulang terminator perintah, jangan gunakan kata atau karakter khusus Transact-SQL yang memiliki arti khusus untuk sistem operasi, baik yang didahului oleh garis miring terbalik atau tidak.

-q "kueri"
Menjalankan kueri saat osql dimulai, tetapi tidak keluar dari osql saat kueri selesai. (Perhatikan bahwa pernyataan kueri tidak boleh menyertakan GO). Jika Anda mengeluarkan kueri dari file batch, gunakan %variabel, atau lingkungan %variabel%. Misalnya:

SET table=sys.objects  
osql -E -q "select name, object_id from %table%"  

Gunakan tanda kutip ganda di sekitar kueri dan tanda kutip tunggal di sekitar apa pun yang disematkan dalam kueri.

-Q"query"
Menjalankan kueri dan segera keluar dari osql. Gunakan tanda kutip ganda di sekitar kueri dan tanda kutip tunggal di sekitar apa pun yang disematkan dalam kueri.

-n
Menghapus penomoran dan simbol perintah (>) dari baris input.

-merror_level
Menyesuaikan tampilan pesan kesalahan. Nomor pesan, status, dan tingkat kesalahan ditampilkan untuk kesalahan tingkat keparahan yang ditentukan atau lebih tinggi. Tidak ada yang ditampilkan untuk kesalahan tingkat yang lebih rendah dari tingkat yang ditentukan. Gunakan -1 untuk menentukan bahwa semua header dikembalikan dengan pesan, bahkan pesan informasi. Jika menggunakan -1, tidak boleh ada spasi antara parameter dan pengaturan (-m-1, bukan -m -1).

-r { 0| 1}
Mengalihkan output pesan ke layar (stderr). Jika Anda tidak menentukan parameter, atau jika Anda menentukan 0, hanya pesan kesalahan dengan tingkat keparahan 11 atau yang lebih tinggi yang dialihkan. Jika Anda menentukan 1, semua output pesan (termasuk "cetak") dialihkan.

-iinput_file
Mengidentifikasi file yang berisi batch pernyataan SQL atau prosedur tersimpan. Operator perbandingan kurang dari (<) dapat digunakan sebagai ganti -i.

-ooutput_file
Mengidentifikasi file yang menerima output dari osql. Operator perbandingan yang lebih besar dari (>) dapat digunakan sebagai ganti -o.

Jika input_file bukan Unicode dan -u tidak ditentukan, output_file disimpan dalam format OEM. Jika input_file unicode atau -u ditentukan, output_file disimpan dalam format Unicode.

-P
Mencetak statistik performa.

-B
Menentukan bahwa osql keluar dan mengembalikan nilai DOS ERRORLEVEL saat terjadi kesalahan. Nilai yang dikembalikan ke variabel DOS ERRORLEVEL adalah 1 ketika pesan kesalahan SQL Server memiliki tingkat keparahan 11 atau lebih besar; jika tidak, nilai yang dikembalikan adalah 0. File batch Microsoft MS-DOS dapat menguji nilai DOS ERRORLEVEL dan menangani kesalahan dengan tepat.

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

-R
Menentukan bahwa driver ODBC SQL Server menggunakan pengaturan klien saat mengonversi data mata uang, tanggal, dan waktu menjadi data karakter.

-O
Menentukan bahwa fitur osql tertentu dinonaktifkan agar sesuai dengan perilaku versi isql sebelumnya. Fitur-fitur ini dinonaktifkan:

  • Pemrosesan batch EOF

  • Penskalakan lebar konsol otomatis

  • Pesan lebar

Ini juga mengatur nilai DOS ERRORLEVEL default ke -1.

Catatan

Opsi -n, -O , dan -D tidak lagi didukung oleh osql.

Keterangan

Utilitas osql dimulai langsung dari sistem operasi dengan opsi peka huruf besar/kecil yang tercantum di sini. Setelah osql dimulai, osqlmenerima pernyataan SQL dan mengirimkannya ke SQL Server secara interaktif. Hasilnya diformat dan ditampilkan di layar (stdout). Gunakan QUIT atau EXIT untuk keluar dari osql.

Jika Anda tidak menentukan nama pengguna saat memulai osql, SQL Server memeriksa variabel lingkungan dan menggunakannya, misalnya, osqluser=(user) atau osqlserver=(server). Jika tidak ada variabel lingkungan yang diatur, nama pengguna stasiun kerja akan digunakan. Jika Anda tidak menentukan server, nama stasiun kerja akan digunakan.

Jika opsi -U atau -P tidak digunakan, SQL Server mencoba menyambungkan menggunakan Mode Autentikasi Microsoft Windows. Autentikasi didasarkan pada akun Microsoft Windows pengguna yang menjalankan osql.

Utilitas osql menggunakan ODBC API. Utilitas menggunakan pengaturan default driver ODBC SQL Server untuk opsi koneksi ISO SQL Server. Untuk informasi selengkapnya, lihat Efek Opsi ANSI.

Catatan

Utilitas osql tidak mendukung jenis data yang ditentukan pengguna CLR. Untuk memproses jenis data ini, Anda harus menggunakan utilitas sqlcmd . Untuk informasi selengkapnya, lihat Utilitas sqlcmd.

Perintah OSQL

Selain pernyataan Transact-SQL dalam osql, perintah ini juga tersedia.

Perintah Deskripsi
GO Menjalankan semua pernyataan yang dimasukkan setelah GO terakhir.
ATUR ULANG Menghapus pernyataan apa pun yang telah Anda masukkan.
KELUAR atau KELUAR( ) Keluar dari osql.
CTRL+C Mengakhiri kueri tanpa keluar dari osql.

Catatan

Tje!! dan perintah ED tidak lagi didukung oleh osql.

Perintah terminator GO (secara default), RESET EXIT, QUIT, dan CTRL+C, hanya dikenali jika muncul di awal baris, segera mengikuti perintah osql .

GO menandakan akhir batch dan eksekusi pernyataan Transact-SQL yang di-cache. Saat Anda menekan ENTER di akhir setiap baris input, osql menyimpan cache pernyataan pada baris tersebut. Saat Anda menekan ENTER setelah mengetik GO, semua pernyataan yang saat ini di-cache dikirim sebagai batch ke SQL Server.

Utilitas osql saat ini berfungsi seolah-olah ada GO tersirat di akhir skrip apa pun yang dijalankan, oleh karena itu semua pernyataan dalam skrip dijalankan.

Akhiri perintah dengan mengetik baris yang dimulai dengan terminator perintah. Anda dapat mengikuti terminator perintah dengan bilangan bulat untuk menentukan berapa kali perintah harus dijalankan. Misalnya, untuk menjalankan perintah ini 100 kali, ketik:

SELECT x = 1  
GO 100  

Hasilnya dicetak sekali di akhir eksekusi. osql tidak menerima lebih dari 1.000 karakter per baris. Pernyataan besar harus tersebar di beberapa baris.

Fasilitas pengenalan perintah Windows dapat digunakan untuk memanggil kembali dan memodifikasi pernyataan osql . Buffer kueri yang ada dapat dibersihkan dengan mengetik RESET.

Saat menjalankan prosedur tersimpan, osql mencetak baris kosong di antara setiap set hasil dalam batch. Selain itu, pesan "0 baris yang terpengaruh" tidak muncul ketika tidak berlaku untuk pernyataan yang dijalankan.

Menggunakan osql Interactively

Untuk menggunakan osql secara interaktif, ketik perintah osql (dan salah satu opsi) pada prompt perintah.

Anda dapat membaca dalam file yang berisi kueri (seperti Stores.qry) untuk eksekusi dengan osql dengan mengetik perintah yang mirip dengan ini:

osql -E -i stores.qry  

Anda dapat membaca dalam file yang berisi kueri (seperti Titles.qry) dan mengarahkan hasilnya ke file lain dengan mengetik perintah yang mirip dengan ini:

osql -E -i titles.qry -o titles.res  

Penting

Jika memungkinkan, gunakan opsi -E(koneksi tepercaya).

Saat menggunakan osql secara interaktif, Anda dapat membaca file sistem operasi ke dalam buffer perintah dengan :rfile_name. Ini mengirimkan skrip SQL di file_name langsung ke server sebagai satu batch.

Catatan

Saat menggunakan osql, SQL Server memperlakukan GO pemisah batch, jika muncul dalam file skrip SQL, sebagai kesalahan sintaks.

Menyisipkan Komentar

Anda dapat menyertakan komentar dalam pernyataan Transact-SQL yang dikirimkan ke SQL Server oleh osql. Dua jenis gaya komentar diizinkan: -- dan /*...*/.

Menggunakan EXIT untuk Mengembalikan Hasil di osql

Anda dapat menggunakan hasil pernyataan SELECT sebagai nilai pengembalian dari osql. Jika angka, kolom terakhir dari baris hasil terakhir dikonversi menjadi bilangan bulat 4-byte (panjang). MS-DOS meneruskan byte rendah ke proses induk atau tingkat kesalahan sistem operasi. Windows melewati seluruh bilangan bulat 4-byte. Sintaksnya adalah:

EXIT ( < query > )  

Misalnya:

EXIT(SELECT @@ROWCOUNT)  

Anda juga dapat menyertakan parameter EXIT sebagai bagian dari file batch. Misalnya:

osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"  

Utilitas osql meneruskan semuanya antara tanda kurung () ke server persis seperti yang dimasukkan. Jika prosedur sistem tersimpan memilih set dan mengembalikan nilai, hanya pilihan yang dikembalikan. Pernyataan EXIT**()** tanpa apa pun di antara tanda kurung menjalankan semuanya yang mendahuluinya dalam batch dan kemudian keluar tanpa nilai pengembalian.

Ada empat format EXIT:

  • KELUAR

Catatan

Tidak menjalankan batch; segera keluar dan tidak mengembalikan nilai.

  • EXIT**()**

Catatan

Menjalankan batch, lalu keluar dan tidak mengembalikan nilai.

  • EXIT**(query)**

Catatan

Menjalankan batch, termasuk kueri, lalu keluar setelah mengembalikan hasil kueri.

  • RAISERROR dengan status 127

Catatan

Jika RAISERROR digunakan dalam skrip osql dan status 127 dinaikkan, osql akan keluar dan mengembalikan ID pesan kembali ke klien. Misalnya:

RAISERROR(50001, 10, 127)  

Kesalahan ini akan menyebabkan skrip osql berakhir dan ID pesan 50001 akan dikembalikan ke klien.

Nilai yang dikembalikan -1 hingga -99 dicadangkan oleh SQL Server; osql mendefinisikan nilai-nilai ini:

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

Menampilkan uang dan Jenis Data smallmoney

osql menampilkan jenis data uang dan smallmoney dengan dua tempat desimal meskipun SQL Server menyimpan nilai secara internal dengan empat tempat desimal. Pertimbangkan contohnya:

SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))  
GO  

Pernyataan ini menghasilkan hasil , 10.3496yang menunjukkan bahwa nilai disimpan dengan semua tempat desimal utuh.

Lihat Juga

Komentar (MDX)
-- (Komentar) (MDX)
CAST dan CONVERT (Transact-SQL)
RAISERROR (Transact-SQL)