2010-04-21 16 views
96

Sto cercando di creare alcune variabili di script in T-SQL come segue:SQL Server ': setvar' Errore

/* 
    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 ho eseguito questo, ottengo un errore che dichiaro 'di sintassi non corretta in prossimità': '. Che cosa sto facendo di sbagliato?

risposta

175

The: setvar funziona solo in modalità comando SQL, quindi è possibile che si esegua normalmente la normale esecuzione SQL nello studio di gestione e non si sia passati alla modalità comandi.

Questo può essere fatto tramite l'interfaccia utente in SQL Server Management Studio andando al menu "Query" e selezionando "Modalità SQLCMD".

+16

Questo è anche un problema quando si utilizza Visual Studio: Dati> Confronto schema di utilità. Se si esegue lo script di modifica risultante dall'interno dell'utilità, si sta andando bene, ma se si decide di esportare/xcopy lo script di modifica dopo aver eseguito un confronto, quindi provare a importare/incollare lo script di modifica risultante in SSMS, come sopra non funzionerà. Ovviamente questo potrebbe anche essere un problema se si includesse lo script di modifica del db in una distribuzione in bundle. Quindi è necessario attivare la modalità comando SQL prima di eseguire lo script tramite il menu come sopra o assicurarsi che lo script di installazione personalizzato lo faccia prima dell'esecuzione. – rism

+3

In Visual Studio (2013): Menu SQL-> Impostazioni di esecuzione-> Modalità SQLCMD – larsts

+0

Mi sto imbattendo in questo problema cercando di utilizzare uno script comparativo scema confrontato per creare il mio database dalla mia applicazione al primo avvio dopo l'installazione, passando lo script a un executenonquery(). Avrò bisogno di trovare un modo per eseguirlo tramite la modalità SQLCMD o di modificare lo script sostituendo tutte le variabili per iniziare. – Scott

1

provare a sostituire :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

con:

USE [MesProduction_Preloaded_KLM_MesSap] 
GO 
+0

Non aiuta la valutazione della variabile nel resto dello script? $ (DatabaseName). [Dbo]. [Qualunque] – CRice

1

Basta attivare la modalità sqlcmd in SQL Server Management Studio, come descritto nella seguente immagine.

enter image description here

Problemi correlati