Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kesalahan SQL Server 111:"... harus menjadi pernyataan pertama dalam kumpulan kueri"

Di SQL Server, batch adalah sekelompok satu atau lebih pernyataan T-SQL yang dikirim pada saat yang sama dari aplikasi ke SQL Server untuk dieksekusi.

Jika Anda menemukan kesalahan seperti ini:

Msg 111, Level 15, State 1, Line 2
'CREATE VIEW' must be the first statement in a query batch.

Mungkin karena Anda menggabungkan pernyataan dengan pernyataan lain dalam kumpulan yang sama, yang tidak diperbolehkan dalam kumpulan.

Bagian pertama dari pesan kesalahan akan bergantung pada pernyataan aktual yang Anda gunakan dalam kumpulan Anda. Dalam kasus saya ini CREATE VIEW , tapi bisa juga dengan mudah CREATE PROCEDURE , CREATE FUNCTION , dll jika itu adalah pernyataan yang Anda gunakan.

Contoh

Berikut ini contoh beberapa kode yang akan menyebabkan kesalahan ini:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Hasil:

Msg 111, Level 15, State 1, Line 3
'CREATE VIEW' must be the first statement in a query batch.

Dalam kasus saya, saya mencoba menjalankan dua pernyataan; sebuah DROP VIEW pernyataan dan CREATE VIEW pernyataan.

Aturan batch T-SQL menyatakan bahwa CREATE VIEW pernyataan tidak dapat digabungkan dengan pernyataan lain dalam batch yang sama.

Dengan kata lain, CREATE VIEW dapat menjadi satu-satunya pernyataan dalam kumpulannya.

Cara Memperbaiki Kesalahan

Kami dapat memperbaiki kesalahan di atas hanya dengan menambahkan pemisah batch setelah pernyataan pertama.

Di SQL Server, tombol GO kata kunci menandakan akhir dari sebuah batch. Lebih khusus lagi, utilitas SQL Server menafsirkan GO sebagai sinyal bahwa mereka harus mengirim kumpulan pernyataan T-SQL saat ini ke instance SQL Server.

Jadi kita bisa mengubah pernyataan sebelumnya menjadi ini:

DROP VIEW IF EXISTS vAllCustomers;
GO
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
GO

Menambahkan GO memperbaiki masalah dengan memisahkan pernyataan menjadi dua kelompok terpisah.

Perhatikan bahwa GO sebenarnya bukan bagian dari T-SQL. Ini adalah perintah yang dikenali oleh utilitas SQL Server untuk tujuan memisahkan pernyataan menjadi kumpulan.

Anda mungkin dapat mengubah pemisah batch, tergantung pada alat yang Anda gunakan untuk menyambung ke SQL Server. Misalnya, di SSMS, Anda dapat menemukan opsi ini dengan membuka:Alat> Opsi> Eksekusi Kueri> SQL Server dan cari opsi yang mengatakan sesuatu seperti “Tentukan kata atau karakter yang dapat digunakan untuk memisahkan kumpulan”.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sisipan massal lambat untuk tabel dengan banyak indeks

  2. T-SQL mendapatkan jumlah hari kerja antara 2 tanggal

  3. Mengapa IS NOT NULL mengembalikan nilai NULL untuk Varchar (maks) di SQL Server?

  4. Menjalankan set kueri SQL menggunakan file batch?

  5. SqlBulkSalin dari Daftar<>