SQL Server ': setvar' Error


123

Tôi đang cố gắng tạo một số biến tập lệnh trong T-SQL như sau:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

Tuy nhiên, khi tôi chạy điều này, tôi gặp lỗi cho biết 'Cú pháp không chính xác gần': '. Tôi đang làm gì sai?

Câu trả lời:


239

: Setvar chỉ hoạt động trong chế độ lệnh SQL, vì vậy bạn có thể đang thực thi SQL bình thường trong studio quản lý và chưa chuyển sang chế độ lệnh.

Điều này có thể được thực hiện thông qua giao diện người dùng trong SQL Server Management Studio bằng cách đi tới menu "Truy vấn" và chọn "Chế độ SQLCMD".


19
Đây cũng là một vấn đề khi sử dụng tiện ích Visual Studio's: Data> Schema Compare. Nếu bạn chạy tập lệnh thay đổi kết quả từ bên trong tiện ích thì bạn vẫn ổn, nhưng nếu bạn quyết định xuất / xcopy tập lệnh thay đổi sau khi thực hiện so sánh và sau đó cố gắng nhập / dán tập lệnh thay đổi kết quả vào SSMS thì như trên, nó sẽ không thành công. Rõ ràng đây cũng có thể là một vấn đề nếu bạn bao gồm tập lệnh thay đổi db trong một triển khai đóng gói. Vì vậy, bạn cần bật chế độ lệnh SQL trước khi chạy tập lệnh thông qua menu như trên hoặc đảm bảo tập lệnh cài đặt tùy chỉnh của bạn làm như vậy trước khi chạy.
rism

6
Trong Visual Studio (2013): SQL menu-> Thực hiện Settings-> SQLCMD chế độ
larsts

Tôi đang gặp phải sự cố này khi cố gắng sử dụng tập lệnh được tạo so sánh quyền trượng để xây dựng cơ sở dữ liệu từ ứng dụng của tôi khi khởi động lần đầu sau khi cài đặt, chuyển tập lệnh đến một thi hành lệnh (). Tôi sẽ cần tìm cách thực thi điều này qua chế độ SQLCMD hoặc hack tập lệnh thay thế tất cả các biến để bắt đầu.
Scott

Chỉ là FYI - tôi đã sử dụng tập lệnh tạo được tạo từ việc xuất bản dự án DB của mình, và sau đó xóa tất cả các tham chiếu đến các biến được tham chiếu bằng cách sử dụng setvar. Tôi đã mã hóa cứng tên cơ sở dữ liệu của mình nên thay vì TẠO CƠ SỞ DỮ LIỆU [$ DatabaseName], nó chỉ là TẠO CƠ SỞ DỮ LIỆU MYDBNAME. Tập lệnh này hiện hoạt động để tạo cơ sở dữ liệu của tôi thông qua executenonquery () trong lần khởi động ứng dụng đầu tiên sau khi cài đặt.
Scott

10

Chỉ cần bật chế độ sqlcmd trong SQL Server Management Studio như được mô tả trong hình ảnh sau.

nhập mô tả hình ảnh ở đây


2

ĐỐI VỚI SQL2012:

truy cập: tools / options / Query Execution và kiểm tra theo mặc định, mở các truy vấn mới trong chế độ SQLCMD.

Nhấn nút Truy vấn mới và đảm bảo rằng các định nghĩa biến được đánh dấu, tập lệnh của bạn sẽ chạy chính xác ngay bây giờ.

Những phiên bản trước:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/


Visual Studio cũng sẽ báo cáo Lỗi cú pháp đối với dự án của bạn khi tệp .sql được mở sử dụng: setvar. Thay đổi Tùy chọn được mô tả ở đây sẽ loại bỏ các lỗi và sẽ tránh "gạch dưới nguệch ngoạc màu đỏ" khỏi câu lệnh (bạn sẽ phải đóng và mở lại mọi tệp .sql đang mở để xem hiệu ứng).
BRebey

0

thử thay thế :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

với:

USE [MesProduction_Preloaded_KLM_MesSap]
GO

Không giúp đánh giá biến trong phần còn lại của tập lệnh? $ (Tên cơ sở dữ liệu). [Dbo]. [Dù]
CRice
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.