2010-09-28 9 views
22

È possibile passare parametri a uno script di SQL Server? Ho uno script che crea un database. Viene chiamato da un file batch utilizzando sqlcmd. Parte di questo script SQL è la seguente:Come passare i parametri a uno script di SQL Server chiamato con 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%) 

Voglio essere in grado di passare nei nomi dei file per il database e il registro in modo che io non devo hardcode 'C: \ dev \ SAMPLE.mdf 'e' C: \ dev \ SAMPLE_log.ldf '.

C'è un modo per farlo? Sono in esecuzione Microsoft SQL Server 2008 Express. Fammi sapere se hai bisogno di ulteriori informazioni.

risposta

32

Utilizzare l'opzione -v per passare le variabili.

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

Poi, nel tuo file di 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

In questo caso, probabilmente vogliono anche definire una variabile '$ (DBNAME)' errori per il nome del database stesso .... –

+0

che sto ottenendo quando lo eseguo: sintassi errata vicino a 'C:'. L'etichetta "C" è già stata dichiarata. I nomi delle etichette devono essere univoci all'interno di una query batch o stored procedure. – Jeremy

+0

Sto provando varie cose, come sfuggire alle barre o alle virgolette. Qualche idea su come correggere quegli errori? – Jeremy

Problemi correlati