Errore ": setvar" di SQL Server


123

Sto cercando di creare alcune variabili di script in T-SQL come segue:

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

Tuttavia, quando lo eseguo, ottengo un errore che indica "Sintassi non corretta vicino a": ". Che cosa sto facendo di sbagliato?

Risposte:


239

Il: setvar funziona solo in modalità comando SQL, quindi è possibile che si trovi nella normale esecuzione SQL nello studio di gestione e non si sia passati alla modalità comando.

Questa operazione può essere eseguita tramite l'interfaccia utente in SQL Server Management Studio accedendo al menu "Query" e selezionando "Modalità SQLCMD".


19
Questo è anche un problema quando si utilizza l'utilità di confronto dati> Schema di Visual Studio. Se esegui lo script di modifica risultante dall'utilità, stai bene, ma se decidi di esportare / xcopy lo script di modifica dopo aver fatto un confronto e poi provi a importare / incollare lo script di modifica risultante in SSMS, come sopra fallirà. Ovviamente questo potrebbe anche essere un problema se includessi lo script di modifica del database in una distribuzione in bundle. Quindi è necessario attivare la modalità di comando SQL prima di eseguire lo script tramite il menu come sopra o assicurarsi che lo script di installazione personalizzato lo faccia prima che venga eseguito.
rism

6
In Visual Studio (2013): menu
SQL-

Sto riscontrando questo problema cercando di utilizzare uno script generato di confronto scema per creare il mio database dalla mia applicazione al primo avvio dopo l'installazione, passando lo script a un executenonquery (). Dovrò trovare un modo per eseguirlo tramite la modalità SQLCMD o hackerare lo script sostituendo tutte le variabili per iniziare.
Scott

Solo un FYI: ho usato lo script di creazione generato dalla pubblicazione del mio progetto DB, quindi ho rimosso tutti i riferimenti alle variabili a cui si fa riferimento utilizzando il setvar. Ho codificato il nome del database, quindi invece di CREATE DATABASE [$ DatabaseName] è stato semplicemente CREATE DATABASE MYDBNAME. Questo script ora funziona per creare il mio database tramite executenonquery () durante il mio primo avvio dell'applicazione dopo l'installazione.
Scott

10

Abilita semplicemente la modalità sqlcmd in SQL Server Management Studio come descritto nell'immagine seguente.

inserisci qui la descrizione dell'immagine


2

PER SQL2012:

vai a: strumenti / opzioni / Esecuzione query e seleziona per impostazione predefinita, apri nuove query in modalità SQLCMD.

Premi il pulsante Nuova query e assicurati che le definizioni delle variabili siano evidenziate, lo script dovrebbe essere eseguito correttamente ora.

Versione precedente:

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


Visual Studio segnalerà anche errori di sintassi rispetto al progetto quando viene aperto un file .sql che utilizza: setvar. La modifica delle Opzioni qui descritta eliminerà gli errori ed eviterà la "sottolineatura ondulata rossa" dall'istruzione (dovrai chiudere e riaprire qualsiasi file .sql aperto per vedere l'effetto).
BRebey

0

prova a sostituire :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

con:

USE [MesProduction_Preloaded_KLM_MesSap]
GO

Non aiuta la valutazione della variabile nel resto dello script? $ (DatabaseName). [Dbo]. [Qualunque cosa]
CRice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.