ข้อผิดพลาด SQL Server ': setvar'


123

ฉันพยายามสร้างตัวแปรสคริปต์ใน T-SQL ดังนี้:

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

อย่างไรก็ตามเมื่อฉันเรียกใช้สิ่งนี้ฉันได้รับข้อผิดพลาดที่ระบุว่า 'ไม่ถูกต้องไวยากรณ์ใกล้': ' ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


239

setvar ใช้งานได้ในโหมดคำสั่ง SQL เท่านั้นดังนั้นคุณอาจอยู่ในการดำเนินการ SQL ปกติในสตูดิโอการจัดการและไม่ได้เปลี่ยนเป็นโหมดคำสั่ง

สามารถทำได้ผ่านอินเทอร์เฟซผู้ใช้ใน SQL Server Management Studio โดยไปที่เมนู "Query" และเลือก "SQLCMD mode"


19
นอกจากนี้ยังเป็นปัญหาเมื่อใช้โปรแกรมอรรถประโยชน์ของ Visual Studio: Data> Schema Compare หากคุณเรียกใช้สคริปต์การเปลี่ยนแปลงที่เป็นผลลัพธ์จากภายในยูทิลิตี้คุณก็สบายดี แต่ถ้าคุณตัดสินใจที่จะส่งออก / xcopy สคริปต์การเปลี่ยนแปลงหลังจากทำการเปรียบเทียบแล้วลองนำเข้า / วางสคริปต์การเปลี่ยนแปลงที่เป็นผลลัพธ์ลงใน SSMS จากนั้นจะล้มเหลว เห็นได้ชัดว่านี่อาจเป็นปัญหาหากคุณรวมสคริปต์การเปลี่ยนแปลงฐานข้อมูลในการปรับใช้แบบบันเดิล ดังนั้นคุณต้องเปิดโหมดคำสั่ง SQL ก่อนที่จะเรียกใช้สคริปต์ผ่านเมนูด้านบนหรือตรวจสอบให้แน่ใจว่าสคริปต์การติดตั้งที่กำหนดเองของคุณทำก่อนที่จะรัน
rism

6
ใน Visual Studio (2013): เมนู
SQL-

ฉันพบปัญหานี้โดยพยายามใช้ scema เปรียบเทียบสคริปต์ที่สร้างขึ้นเพื่อสร้างฐานข้อมูลของฉันจากแอปพลิเคชันของฉันในการเริ่มต้นครั้งแรกหลังการติดตั้งส่งผ่านสคริปต์ไปยังการเรียกใช้งาน () ฉันจะต้องหาวิธีดำเนินการผ่านโหมด SQLCMD หรือแฮ็คสคริปต์แทนที่ตัวแปรทั้งหมดเพื่อเริ่มต้น
Scott

เพียงแค่ FYI - ฉันใช้สคริปต์สร้างที่สร้างขึ้นจากการเผยแพร่โครงการ DB ของฉันแล้วลบการอ้างอิงทั้งหมดไปยังตัวแปรที่อ้างอิงโดยใช้ setvar ฉันเข้ารหัสชื่อฐานข้อมูลของฉันแทน CREATE DATABASE [$ DatabaseName] เพียงแค่สร้างฐานข้อมูล MYDBNAME ขณะนี้สคริปต์นี้ใช้งานได้เพื่อสร้างฐานข้อมูลของฉันผ่านทาง executenonquery () ในระหว่างการเริ่มต้นแอปพลิเคชันครั้งแรกของฉันหลังจากติดตั้ง
Scott


2

สำหรับ SQL2012:

ไปที่: tools / options / Query Execution และตรวจสอบตามค่าเริ่มต้นเปิดการสืบค้นใหม่ในโหมด SQLCMD

กดปุ่มแบบสอบถามใหม่และตรวจสอบให้แน่ใจว่ามีการเน้นคำจำกัดความของตัวแปรสคริปต์ของคุณควรทำงานอย่างถูกต้องในขณะนี้

รุ่นก่อนหน้า:

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


Visual Studio จะรายงานข้อผิดพลาดทางไวยากรณ์ต่อโปรเจ็กต์ของคุณเมื่อเปิดไฟล์. sql ที่ใช้: setvar การเปลี่ยนแปลงตัวเลือกที่อธิบายไว้ในที่นี้จะกำจัดข้อผิดพลาดและจะหลีกเลี่ยง "ขีดเส้นใต้สีแดง" จากคำสั่ง (คุณจะต้องปิดและเปิดไฟล์. sql ที่เปิดอยู่อีกครั้งเพื่อดูผล)
BRebey

0

ลองเปลี่ยน :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

ด้วย:

USE [MesProduction_Preloaded_KLM_MesSap]
GO

ไม่ช่วยประเมินตัวแปรในส่วนที่เหลือของสคริปต์หรือไม่? $ (DatabaseName). [dbo]. [อะไรก็ตาม]
CRice
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.