Bagikan melalui


Utilitas osql

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform 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 dari sakelar-sakelar osql.

-L

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

Catatan

osql mungkin tidak menerima respons tepat waktu dari semua server dalam jaringan Windows. Daftar server yang dikembalikan mungkin bervariasi untuk setiap pemanggilan opsi ini.

-U login_id

ID masuk pengguna. ID login sensitif terhadap huruf besar/kecil.

Kata sandi -P

Kata sandi yang ditentukan pengguna. -P Jika opsi tidak digunakan, osql akan meminta kata sandi. -P Jika opsi 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 informasi selengkapnya, lihat Kata sandi yang kuat.

Kata sandi peka terhadap huruf besar dan kecil.

OSQLPASSWORD Variabel lingkungan 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 OSQLPASSWORD variabel pada prompt perintah lalu mengakses utilitas osql :

SET OSQLPASSWORD=abracadabra
osql

Penting

Untuk menyembunyikan kata sandi Anda, jangan tentukan opsi -P bersama dengan opsi -U. Sebagai gantinya, setelah menentukan osql bersama dengan -U opsi dan sakelar lainnya (jangan tentukan -P), tekan Enter, dan osql meminta kata sandi. Metode ini memastikan bahwa kata sandi Anda diselubungi saat dimasukkan.

-E

Menggunakan koneksi tepercaya alih-alih meminta kata sandi.

-S server_name[\instance_name]

Menentukan instans SQL Server yang akan disambungkan. Tentukan server_name untuk menyambungkan ke instans default SQL Server di server tersebut. Tentukan untuk menyambungkan <server_name>\<instance_name> 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.

-H wksta_name

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

-d db_name

Mengeluarkan perintah USE db_name saat osql dimulai.

-l time_out

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

-t time_out

Menentukan jumlah detik sebelum perintah habis. Jika nilai batas waktu tidak ditentukan, perintah tidak kehabisan waktu.

-h header

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 harus dicetak. Jika -1 digunakan, tidak boleh ada spasi antara parameter dan pengaturan (-h-1, bukan -h -1).

-s col_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 (").

-w column_width

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

-a packet_size

Memungkinkan Anda meminta paket berukuran berbeda. Nilai yang valid untuk packet_size adalah 512 hingga 65535. Nilai default osql adalah nilai default server. Peningkatan ukuran paket dapat meningkatkan performa pada eksekusi skrip yang lebih besar di mana jumlah pernyataan Transact-SQL antar GO perintah 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

Menyuarakan masukan.

-I

Menghidupkan opsi koneksi QUOTED_IDENTIFIER.

-D data_source_name

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

-c cmd_end

Menentukan terminator perintah. Secara default, perintah diakhiri dan dikirim ke SQL Server dengan memasukkan GO pada baris tersendiri. Saat Anda mengatur ulang terminator perintah, jangan gunakan Transact-SQL kata atau karakter khusus 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. (Pernyataan kueri tidak boleh menyertakan GO). Jika Anda mengeluarkan kueri dari file batch, gunakan %<variable>, atau lingkungan %<variable>%. Contohnya:

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.

-Qkueri

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.

-m error_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 yang berada di bawah 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.

-i input_file

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

-o output_file

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

Jika input_file tidak 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 kinerja.

-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. MS-DOS file batch 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 harus menggunakan pengaturan klien saat mengonversi data mata uang, tanggal, dan waktu ke data karakter.

-O

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

  • Pemrosesan EOF batch
  • Penskalakan lebar konsol otomatis
  • Pesan luas

Ini juga mengatur nilai DOS ERRORLEVEL default ke -1.

Catatan

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

Keterangan

Utilitas osql dimulai langsung dari sistem operasi dengan opsi peka terhadap huruf besar/kecil yang tercantum di sini. Setelah osql dimulai, osql menerima 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 -U atau -P tidak digunakan, SQL Server mencoba menghubungkan menggunakan Mode Autentikasi Windows. Autentikasi didasarkan pada akun 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 Pertimbangan Saat Anda Menggunakan Pernyataan SET.

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 yang terakhir GO.
RESET Menghapus pernyataan apa pun yang telah Anda masukkan.
QUIT atau EXIT() Keluar dari osql.
Ctrl+C Mengakhiri kueri tanpa keluar dari osql.

Catatan

Perintah !! dan ED tidak didukung oleh osql.

Terminator perintah GO (secara default), RESET, EXIT, QUIT, dan Ctrl+C, hanya diakui jika muncul di awal baris, segera mengikuti prompt 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 tersirat GO 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.

Anda dapat menggunakan fasilitas penarikan kembali perintah di Windows, untuk mengingat dan memodifikasi pernyataan osql . Buffer kueri yang ada dapat dibersihkan dengan mengetik RESET.

Saat osql 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 secara interaktif

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

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

Catatan

osql memperlakukan pemisah GO batch sebagai kesalahan sintaksis, jika muncul dalam file skrip SQL.

Sisipkan komentar

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

Gunakan exit untuk mengembalikan hasil di osql

Anda dapat menggunakan hasil SELECT pernyataan sebagai nilai pengembalian dari osql. Jika numerik, 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 memproses seluruh bilangan bulat 4-byte. Sintaksnya adalah:

EXIT ( <query> )

Contohnya:

EXIT(SELECT @@ROWCOUNT)

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

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 apapun di antara tanda kurung menjalankan semua yang mendahuluinya dalam batch dan kemudian keluar tanpa nilai balik.

Ada empat format EXIT:

Rancangan Detail lebih lanjut
EXIT Tidak menjalankan batch; berhenti segera dan tidak mengembalikan nilai.
EXIT() Menjalankan batch, lalu keluar dan tidak mengembalikan nilai.
EXIT(<query>) Menjalankan batch, termasuk kueri, lalu keluar setelah mengembalikan hasil kueri.
RAISERROR dengan status 127 Jika RAISERROR digunakan dalam skrip osql dan status 127 dinaikkan, osql keluar dan mengembalikan ID pesan kembali ke klien.

Contoh berikut menunjukkan cara memengaruhi perilaku osql dengan RAISERROR:

RAISERROR (50001, 10, 127);

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

Nilai -1 hingga -99 dicadangkan. osql mendefinisikan nilai berikut:

  • -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 jenis data money dan 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.