Erreur SQL Server ': setvar'

123

J'essaie de créer des variables de script dans T-SQL comme suit:

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

Cependant, lorsque j'exécute ceci, j'obtiens une erreur indiquant "Syntaxe incorrecte près de": ". Qu'est-ce que je fais mal?

Randy Minder
la source

Réponses:

239

Le: setvar ne fonctionne qu'en mode de commande SQL, vous êtes donc probablement dans une exécution SQL normale dans le studio de gestion et n'avez pas basculé en mode de commande.

Cela peut être fait via l'interface utilisateur de SQL Server Management Studio en allant dans le menu «Requête» et en sélectionnant «mode SQLCMD».

Andrew
la source
19
C'est également un problème lors de l'utilisation de l'utilitaire: Data> Schema Compare de Visual Studio. Si vous exécutez le script de modification résultant à partir de l'utilitaire, tout va bien, mais si vous décidez d'exporter / xcopier le script de modification après avoir effectué une comparaison, puis essayez d'importer / coller le script de modification résultant dans SSMS, comme ci-dessus, il échouera. Évidemment, cela pourrait également être un problème si vous incluiez le script de changement de base de données dans un déploiement groupé. Vous devez donc activer le mode de commande SQL avant d'exécuter le script via le menu comme ci-dessus ou vous assurer que votre script d'installation personnalisé le fait avant de s'exécuter.
rism
6
Dans Visual Studio (2013): menu SQL-> Paramètres d'exécution-> Mode
SQLCMD
Je rencontre ce problème en essayant d'utiliser un script généré par scema compare pour créer ma base de données à partir de mon application au premier démarrage après l'installation, en passant le script à une executenonquery (). Je devrai soit trouver un moyen d'exécuter cela via le mode SQLCMD, soit pirater le script en remplaçant toutes les variables pour un démarrage.
Scott
Juste un FYI - J'ai utilisé le script de création généré à partir de la publication de mon projet DB, puis j'ai supprimé toutes les références aux variables référencées à l'aide de setvar. J'ai codé en dur le nom de ma base de données donc au lieu de CREATE DATABASE [$ DatabaseName], c'était simplement CREATE DATABASE MYDBNAME. Ce script fonctionne maintenant pour créer ma base de données via executenonquery () lors de mon premier démarrage d'application après l'installation.
Scott
10

Activez simplement le mode sqlcmd dans SQL Server Management Studio, comme décrit dans l'image suivante.

entrez la description de l'image ici

Muhammad Awais
la source
2

POUR SQL2012:

allez dans: outils / options / Exécution des requêtes et cochez par défaut, ouvrir de nouvelles requêtes en mode SQLCMD.

Appuyez sur le bouton Nouvelle requête et assurez-vous que les définitions de variable sont en surbrillance, votre script doit maintenant s'exécuter correctement.

Versions précédentes:

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

Terrence Harry Holmes
la source
Visual Studio signale également les erreurs de syntaxe par rapport à votre projet lorsqu'un fichier .sql est ouvert qui utilise: setvar. Le changement d'Options décrit ici éliminera les erreurs, et évitera le «soulignement ondulé rouge» de l'instruction (vous devrez fermer et rouvrir tous les fichiers .sql ouverts pour voir l'effet).
BRebey
0

essayez de remplacer :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

avec:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
la source
N'aide-t-il pas l'évaluation de la variable dans le reste du script? $ (DatabaseName). [Dbo]. [Whatever]
CRice