Bonjour à tous,

Je suis en train de développer un script pour une base SQL server 2005 express.

Ce script a pour but de, tous les ans, créer une nouvelle base archivant toutes les données de l'année de la base principale.

Je développe ce script dans un .bat mais j'ai un soucis de syntaxe apparemment ....

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
sqlcmd -E -S Mon-Serveur -Q"DECLARE @SQL NVARCHAR(500);
SET @SQL = 'Archives_'  + CONVERT(NVARCHAR(32), YEAR(CURRENT_TIMESTAMP)) 
DECLARE @SQL1 NVARCHAR(500); 
SET @SQL1 = 'RESTORE DATABASE [' + @SQL + '] FROM  DISK = N"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\PANORAMA_TEST.bak" WITH  FILE = 1,  MOVE N"PANORAMA_TEST" TO N"D:\SQL\PROD\' + @SQL + '.mdf",  MOVE N"PANORAMA_TEST_log" TO N"D:\SQL\PROD\' + @SQL + '_log.LDF",  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10'; EXEC(@SQL1);"
Je vous explique :
@SQL contient le nom de la nouvelle base, ici "Archives_2009"
@SQL1 contient ma requete de restauration de ma nouvelle base avec la base principale.

Lorsque j'execute mon .bat, j'ai ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 <<C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\PANORAMA_TEST.bak" WITH  FILE = 1,
  MOVE N"PANORAMA_TEST" TO N"D:\SQL\PROD\' + @SQL + '.mdf",  MOVE N"PANORAMA_TEST_log" TO N"D:\SQL\PROD\' + @SQL + '_log.LDF",  NORECOVERY,
  NOUNLOAD,  REPLACE,  STATS = 10'; EXEC(@SQL1);">> : argument inattendu.

Lorsque j'exécute ce code dans l'éditeur SQL Server, j'ai ces erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Msg*102, Niveau*15, État*1, Ligne*1
Syntaxe incorrecte vers 'N'.
Msg*319, Niveau*15, État*1, Ligne*1
Syntaxe incorrecte près du mot clé «*with*». Si l'instruction est une expression de table commune ou une clause xmlnamespaces, l'instruction précédente doit se terminer par un point-virgule.
Lorsque j'utilise la restauration sans passer par des variables, cette syntaxe fonctionne très bien, mais là je vous avoue que je suis un peu perdu =/

Si quelqu'un a une idée ?

Merci.