Kesalahan SQL Server ': setvar'

123

Saya mencoba membuat beberapa variabel skrip di T-SQL sebagai berikut:

    /*
    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"

Namun, ketika saya menjalankan ini, saya mendapatkan kesalahan yang menyatakan 'Sintaks salah dekat': '. Apa yang saya lakukan salah?

Randy Minder
sumber

Jawaban:

239

The: setvar hanya berfungsi dalam mode perintah SQL, jadi Anda mungkin dalam eksekusi SQL normal di studio manajemen dan belum bertukar ke mode perintah.

Ini dapat dilakukan melalui antarmuka pengguna di SQL Server Management Studio dengan membuka menu "Kueri", dan memilih "mode SQLCMD".

Andrew
sumber
19
Ini juga menjadi masalah saat menggunakan utilitas Visual Studio: Data> Schema Compare. Jika Anda menjalankan skrip perubahan yang dihasilkan dari dalam utilitas, Anda baik-baik saja, tetapi jika Anda memutuskan untuk mengekspor / menyalin skrip perubahan setelah melakukan perbandingan dan kemudian mencoba mengimpor / menempelkan skrip perubahan yang dihasilkan ke dalam SSMS maka seperti di atas akan gagal. Jelas ini juga bisa menjadi masalah jika Anda menyertakan skrip perubahan db dalam penerapan yang dibundel. Jadi, Anda perlu mengaktifkan mode perintah SQL sebelum menjalankan skrip baik melalui menu seperti di atas atau memastikan skrip penginstalan kustom Anda melakukannya sebelum dijalankan.
rism
6
Dalam Visual Studio (2013): menu
SQL-
Saya mengalami masalah ini saat mencoba menggunakan skrip yang dibandingkan scema yang dihasilkan untuk membangun database saya dari aplikasi saya pada startup pertama setelah penginstalan, meneruskan skrip ke executenonquery (). Saya harus menemukan cara untuk menjalankan ini melalui mode SQLCMD atau meretas skrip yang mengganti semua variabel untuk memulai.
Scott
Hanya FYI - Saya menggunakan skrip buat yang dihasilkan dari menerbitkan proyek DB saya, dan kemudian menghapus semua referensi ke variabel yang direferensikan menggunakan setvar. Saya melakukan hardcode nama database saya jadi alih-alih CREATE DATABASE [$ DatabaseName] itu cukup CREATE DATABASE MYDBNAME. Skrip ini sekarang berfungsi untuk membuat database saya melalui executenonquery () selama startup aplikasi pertama saya setelah penginstalan.
Scott
10

Cukup aktifkan mode sqlcmd di SQL Server Management Studio seperti yang dijelaskan pada gambar berikut.

masukkan deskripsi gambar di sini

Muhammad Awais
sumber
2

UNTUK SQL2012:

buka: alat / opsi / Eksekusi Kueri dan periksa secara default, buka kueri baru dalam mode SQLCMD.

Tekan tombol Kueri Baru dan pastikan definisi variabel disorot, skrip Anda harus berjalan dengan benar sekarang.

Versi sebelumnya:

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

Terrence Harry Holmes
sumber
Visual Studio juga akan melaporkan kesalahan sintaks terhadap proyek Anda ketika file .sql terbuka yang menggunakan: setvar. Perubahan Opsi yang dijelaskan di sini akan menghilangkan kesalahan, dan akan menghindari "garis bawah merah berlekuk-lekuk" dari pernyataan (Anda harus menutup dan membuka kembali file .sql yang terbuka untuk melihat efeknya).
BRebey
0

coba ganti :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

dengan:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
sumber
Tidak membantu evaluasi variabel di seluruh skrip? $ (DatabaseName). [Dbo]. [Terserah]
CRice