SQL Server „: setvar” Błąd

123

Próbuję utworzyć kilka zmiennych skryptu w T-SQL w następujący sposób:

    /*
    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 po uruchomieniu tego programu pojawia się komunikat o błędzie „Nieprawidłowa składnia w pobliżu”: ”. Co ja robię źle?

Randy Minder
źródło

Odpowiedzi:

239

Polecenie: setvar działa tylko w trybie poleceń SQL, więc prawdopodobnie jesteś w normalnym wykonywaniu SQL w studiu zarządzania i nie przełączył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 opcję „Tryb SQLCMD”.

Andrzej
źródło
19
Jest to również problem podczas korzystania z narzędzia Visual Studio: dane> porównywanie schematów. Jeśli uruchomisz wynikowy skrypt zmiany z poziomu narzędzia, wszystko jest w porządku, ale jeśli zdecydujesz się wyeksportować / skopiować skrypt zmiany po wykonaniu porównania, a następnie spróbujesz zaimportować / wkleić wynikowy skrypt zmiany do programu SSMS, to jak powyżej zakończy się niepowodzeniem. Oczywiście może to również stanowić problem, jeśli uwzględnisz skrypt zmiany db w pakiecie wdrożenia. Musisz więc włączyć tryb poleceń SQL przed uruchomieniem skryptu za pomocą menu jak powyżej lub upewnić się, że niestandardowy skrypt instalacji zrobi to przed uruchomieniem.
ryzm
6
W programie Visual Studio (2013): menu SQL-> Ustawienia wykonywania-> tryb
SQLCMD
Napotykam ten problem, próbując użyć wygenerowanego skryptu porównującego schematy, aby zbudować moją bazę danych z mojej aplikacji przy pierwszym uruchomieniu po instalacji, przekazując skrypt do zapytania executenonquery (). Będę musiał znaleźć sposób na wykonanie tego w trybie SQLCMD lub zhakować skrypt, zastępując wszystkie zmienne na początek.
Scott,
Tylko do Twojej wiadomości - użyłem skryptu tworzenia wygenerowanego po opublikowaniu mojego projektu DB, a następnie usunąłem wszystkie odniesienia do zmiennych, do których się odwołano za pomocą setvar. Zakodowałem na stałe nazwę mojej bazy danych, więc zamiast CREATE DATABASE [$ DatabaseName] było po prostu CREATE DATABASE MYDBNAME. Ten skrypt działa teraz w celu utworzenia mojej bazy danych za pomocą funkcji executenonquery () podczas pierwszego uruchomienia aplikacji po instalacji.
Scott,
10

Po prostu włącz tryb sqlcmd w SQL Server Management Studio, jak opisano na poniższym obrazie.

wprowadź opis obrazu tutaj

Muhammad Awais
źródło
2

DLA SQL2012:

przejdź do: tools / options / Query Execution i zaznacz domyślnie, otwieraj nowe zapytania w trybie SQLCMD.

Naciśnij przycisk Nowe zapytanie i upewnij się, że definicje zmiennych są podświetlone. Twój skrypt powinien teraz działać poprawnie.

Poprzednie wersje:

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

Terrence Harry Holmes
źródło
Program Visual Studio zgłosi również błędy składni projektu, gdy otwarty jest plik .sql, który używa: setvar. Opisana tutaj zmiana opcji wyeliminuje błędy i pozwoli uniknąć „czerwonego falistego podkreślenia” w instrukcji (będziesz musiał zamknąć i ponownie otworzyć wszystkie otwarte pliki .sql, aby zobaczyć efekt).
BRebey
0

spróbuj wymienić :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

z:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
źródło
Nie pomaga w ocenie zmiennej w pozostałej części skryptu? $ (DatabaseName). [Dbo]. [Cokolwiek]
CRice