2010-04-21 19 views
96

Próbuję utworzyć kilka zmiennych skryptów w T-SQL w następujący sposób:SQL Server „: setvar” Błąd

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

Jednak gdy uruchomię to pojawia się błąd informujący, „Niepoprawna składnia w pobliżu”: ". Co ja robię źle?

Odpowiedz

175

The: setvar działa tylko w trybie poleceń SQL, więc prawdopodobnie jesteś w normalnym trybie SQL w zarządzaniu i nie zamieniłeś się na tryb poleceń.

Można to zrobić za pomocą interfejsu użytkownika w SQL Server Management Studio przechodząc do menu "Zapytanie" i wybierając "Tryb SQLCMD".

+16

Jest to także problem przy użyciu Visual Studio: Dane> Schemat Porównaj użyteczność. Jeśli uruchomisz wynikowy skrypt zmian z poziomu narzędzia, wszystko będzie w porządku, ale jeśli zdecydujesz się na eksport/xcopy skryptu zmian po wykonaniu porównania, a następnie spróbuj zaimportować/wkleić powstały skrypt zmian do SSMS, to jak wyżej, to się nie powiedzie. Oczywiście może to być również problem, jeśli uwzględnisz skrypt zmiany db w pakiecie wdrażania. Musisz więc włączyć tryb poleceń SQL przed uruchomieniem skryptu za pośrednictwem menu jak powyżej lub upewnij się, że niestandardowy skrypt instalacyjny robi to przed uruchomieniem. – rism

+3

W programie Visual Studio (2013): menu SQL-> Ustawienia wykonywania-> Tryb SQLCMD – larsts

+0

Występuje problem polegający na próbie użycia wygenerowanego skryptu scema do zbudowania bazy danych z mojej aplikacji podczas pierwszego uruchomienia po instalacji, przekazując skrypt do executenonquery(). Będę musiał albo znaleźć sposób na wykonanie tego przez tryb SQLCMD, albo zhakować skrypt, zastępując wszystkie zmienne na początek. – Scott

1

spróbować wymienić :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

z:

USE [MesProduction_Preloaded_KLM_MesSap] 
GO 
+0

Nie pomaga w ocenie zmiennej w pozostałej części skryptu? $ (DatabaseName). [Dbo]. [Cokolwiek] – CRice

1

Wystarczy włączyć tryb sqlcmd w SQL Server Management Studio, jak to opisano w poniższym obrazie.

enter image description here