2011-05-19 4 views
0

Lorsque j'ai exécuté le script suivant, j'obtiens l'erreur suivante. Que dois-je faire pour corriger ce problème?Script Sql - Erreur de syntaxe incorrecte

Erreur

Msg 102, Level 15, State 1, Line 9 
Incorrect syntax near '@path'. 

Script

GO 
declare @path varchar(2000) 
declare @path1 varchar(2000) 
select @path=(SELECT [filename] FROM master..sysdatabases WHERE [name] LIKE 'master') 
set @path= REPLACE(@path, 'master', 'test') 
set @path1= REPLACE(@path, 'test.mdf', 'test_log.ldf') 
select @path 
select @path1 
CREATE DATABASE [test] ON 
(FILENAME = @path), 
(FILENAME =N'D:\Program Files (x86)\Microsoft SQL Server\MSSQL.3\MSSQL\DATA\test_log.ldf') 
FOR ATTACH 
GO 
+1

Cela tente de lire l'emplacement de la base de données 'master' qui ne doit pas ** être identique au chemin de données par défaut configuré (il n'est pas sur mon machines, par exemple) –

Répondre

3

Remplacer

CREATE DATABASE [test] ON 
(FILENAME = @path), 
(FILENAME =N'D:\Program Files (x86)\Microsoft SQL Server\MSSQL.3\MSSQL\DATA\test_log.ldf') 
FOR ATTACH 

avec

DECLARE @sql nvarchar(400); 
SET @sql = ' 
CREATE DATABASE [test] ON 
(FILENAME = ' + quotename(@path,'''') + '), 
(FILENAME =N' + quotename(@path1,'''') + ') 
FOR ATTACH 
' 
EXECUTE sp_executesql @sql; 
+0

Mon but est de copier les fichiers mdf et ldf dans le dossier d'installation du serveur SQL, puis de créer la base de données. Est-ce la bonne façon de faire cela? Dois-je faire des changements dans le script? – Maanu

+0

J'utiliserais les chemins référencés dans l'article @marc_s lié à. S'agit-il d'un déploiement plus «produit» dans lequel vous distribuez des bases de données sans connaître les informations de serveur à l'avance ou pour un déploiement plus «interne» où 1 processus doit être déployé vers dev/QA/UAT/prod? En règle générale, le chemin d'accès à la base de données principale ne contient aucune valeur erronée (injectée), mais c'est toujours une bonne idée de vérifier les valeurs avant de concaténer et d'exécuter. –

1

Vous n'êtes pas vraiment lire le répertoire de données par défaut configuré - vous en train de lire le répertoire dans lequel la base de données master est situé (et cela ne doit pas être le répertoire par défaut configuré pour les fichiers de données) .

Si vous voulez vraiment connaître le vrai répertoire - vous devez jeter un coup d'oeil dans le registre. Voir ce blog post here at SQL Server Central pour tous les détails sanglants ...