2010-09-28 17 views
22

Est-il possible de transmettre des paramètres à un script SQL Server? J'ai un script qui crée une base de données. Il est appelé à partir d'un fichier batch en utilisant sqlcmd. Une partie de ce script SQL est comme suit:Comment passer des paramètres à un script SQL Server appelé avec sqlcmd?

CREATE DATABASE [SAMPLE] ON PRIMARY 
(NAME = N'SAMPLE', FILENAME = N'c:\dev\SAMPLE.mdf' , SIZE = 23552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'SAMPLE_log', FILENAME = N'c:\dev\SAMPLE_log.ldf' , SIZE = 29504KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 

Je veux être en mesure de passer dans les noms de fichiers pour la base de données et le journal pour que je n'ai pas hardcode « C: \ dev \ SAMPLE.mdf 'et' C: \ dev \ SAMPLE_log.ldf '.

Existe-t-il un moyen de le faire? Je cours Microsoft SQL Server 2008 Express. Faites-moi savoir si vous avez besoin de plus d'informations.

Répondre

32

Utilisez l'option -v pour transmettre des variables.

sqlcmd -v varMDF="C:\dev\SAMPLE.mdf" varLDF="C:\dev\SAMPLE_log.ldf" 

ensuite dans votre fichier script

CREATE DATABASE [SAMPLE] ON PRIMARY 
(NAME = N'SAMPLE', FILENAME = N'$(varMDF)' , SIZE = 23552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'SAMPLE_log', FILENAME = N'$(varLDF)' , SIZE = 29504KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
+4

Dans ce cas, vous souhaiterez probablement définir une variable '$ (DbName)' le nom de la base de données elle-même .... –

+0

Je recevais des erreurs quand je l'exécute: Syntaxe incorrecte près de 'C:'. L'étiquette "C" a déjà été déclarée. Les noms d'étiquette doivent être uniques dans un lot de requêtes ou une procédure stockée. – Jeremy

+0

J'essaie différentes choses, comme échapper aux barres obliques ou aux guillemets. Des idées pour réparer ces erreurs? – Jeremy