Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lỗi máy chủ SQL 111:“… phải là câu lệnh đầu tiên trong một loạt truy vấn”

Trong SQL Server, lô là một nhóm gồm một hoặc nhiều câu lệnh T-SQL được gửi cùng lúc từ một ứng dụng đến SQL Server để thực thi.

Nếu bạn gặp lỗi như sau:

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

Có thể là do bạn đang kết hợp câu lệnh với các câu lệnh khác trong cùng một lô, điều này không được phép theo lô.

Phần đầu tiên của thông báo lỗi sẽ phụ thuộc vào câu lệnh thực tế mà bạn đang sử dụng trong lô của mình. Trong trường hợp của tôi, đó là CREATE VIEW , nhưng nó có thể dễ dàng như CREATE PROCEDURE , CREATE FUNCTION , v.v. nếu đó là những câu bạn đang sử dụng.

Ví dụ

Dưới đây là ví dụ về một số mã có thể gây ra lỗi này:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Kết quả:

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

Trong trường hợp của tôi, tôi đang cố chạy hai câu lệnh; một DROP VIEW và một CREATE VIEW tuyên bố.

Các quy tắc của lô T-SQL nêu rõ rằng CREATE VIEW không thể kết hợp câu lệnh với các câu lệnh khác trong cùng một lô.

Nói cách khác, CREATE VIEW có thể là câu lệnh duy nhất trong lô của nó.

Cách sửa lỗi

Chúng tôi có thể sửa lỗi trên bằng cách thêm dấu phân tách lô sau câu lệnh đầu tiên.

Trong SQL Server, GO từ khóa báo hiệu sự kết thúc của một lô. Cụ thể hơn, các tiện ích SQL Server diễn giải GO như một tín hiệu rằng họ nên gửi loạt câu lệnh T-SQL hiện tại tới một phiên bản của SQL Server.

Vì vậy, chúng tôi có thể thay đổi câu lệnh trước thành sau:

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

Thêm GO khắc phục sự cố bằng cách tách các câu lệnh thành hai lô riêng biệt.

Lưu ý rằng GO không thực sự là một phần của T-SQL. Đây là một lệnh được các tiện ích SQL Server công nhận nhằm mục đích tách các câu lệnh thành các lô.

Bạn có thể thay đổi dấu phân tách hàng loạt, tùy thuộc vào công cụ bạn sử dụng để kết nối với SQL Server. Ví dụ:trong SSMS, bạn có thể tìm thấy tùy chọn này bằng cách đi tới: Công cụ > Tùy chọn > Thực thi truy vấn > Máy chủ SQL và tìm một tùy chọn có nội dung như “Chỉ định một từ hoặc ký tự có thể được sử dụng để tách các lô”.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chỉ định tên khóa chính trong EF-Code-First

  2. Cách bỏ Ràng buộc khóa ngoại trong Cơ sở dữ liệu SQL Server cho tất cả các bảng - Hướng dẫn SQL Server / TSQL Phần 72

  3. Tìm các giá trị không phải số trong một cột trong SQL Server

  4. Làm cách nào để gọi một thủ tục được lưu trữ với các đối số bằng sqlcmd.exe?

  5. ATN2 () Ví dụ trong SQL Server