2011-05-06 5 views
2

J'ai la requête suivante que je cours en utilisant un fichier de commandes. Dans le fichier batch que j'utilise la syntaxe suivante:Msg 102, niveau 15, état 1 ligne 1 syntaxe incorrecte près de 'n'

echo populating Application table with values... 

SET "installFile=%sqlDir%\Install\DataFiles\Insert_ApplicationNames.sql" 

OSQL /n /i "%installFile%" /d%db% /U%user% /P%pswd% /S%serv% 
echo 
echo populated Application table with values in Insert_ApplicationNames.sql 
echo 

Le sql illustré ci-dessous fonctionne sans erreur lorsqu'elle est exécutée la SQL Management Studio, mais il garde la moindre erreur lorsqu'il est exécuté comme une partie du script de traitement par lots. Quelqu'un pourrait-il m'aider à trouver ce que je fais mal ici?

En outre, les lignes sont insérées, mais l'installation de notre assurance qualité chaque soir se brise en raison de l'erreur générée par le script de traitement par lots.

IF NOT EXISTS(SELECT * FROM Application WHERE name = '') 
BEGIN 
    INSERT INTO Application 
    (Name) 
    VALUES 
    ('') 
END 
GO 
IF NOT EXISTS(SELECT * FROM Application WHERE name = 'App1.exe') 
BEGIN 
    INSERT INTO Application 
    (Name) 
    VALUES 
    ('App1.exe') 
END 
GO 
IF NOT EXISTS(SELECT * FROM Application WHERE name = 'App2.exe') 
BEGIN 
    INSERT INTO Application 
    (Name) 
    VALUES 
    ('App2.exe') 
END 
+0

Est-ce le script exact dans 'Insert_ApplicationNames.sql'? –

+0

oui, seulement diff étant qu'il ya 2 autres noms d'applications que j'insère avec le dessus 3 – EndlessSpace

+2

Quelle ** version ** de SQL Server utilisez-vous? À partir de 2005, vous devriez utiliser l'utilitaire 'sqlcmd' plutôt que l'osql ... –

Répondre

2

GO est le mot-clé de séparation par lots (par défaut) dans Management Studio, mais ce n'est pas une réelle mot-clé SQL (à savoir, SQL Server ne reconnaît pas).

Supprimez ceux de votre script - dans le script que vous avez fourni, ils ne sont pas pertinents de toute façon - et vous devriez être bon pour, um, allez.

0

Vous ne savez pas si vos variables doivent être directement contre les commutateurs. Essaye ça? Que se passe-t-il lorsque vous utilisez la ligne ci-dessus avec vos bonnes valeurs connues directement dans la commande?

OSQL -n -i "C:\foo.sql" -d MyDB -U MyUser -P MyPwd -S MyServ 
+0

J'ai essayé vos deux suggestions, mais toujours la même erreur. De plus, de nombreux autres scripts SQL sont exécutés avec la même syntaxe et tous s'exécutent correctement – EndlessSpace

Questions connexes