2010-09-28 121 views
22

¿Es posible pasar parámetros a un script de SQL Server? Tengo un script que crea una base de datos. Se llama desde un archivo por lotes utilizando sqlcmd. Parte de esa secuencia de comandos SQL es el siguiente:Cómo pasar parámetros a un script de SQL Server llamado 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%) 

Quiero ser capaz de pasar en los nombres de archivo de la base de datos y el registro de modo que yo no tengo que codificar 'C: \ dev \ SAMPLE.mdf 'y' C: \ dev \ SAMPLE_log.ldf '.

¿Hay alguna manera de hacerlo? Estoy ejecutando Microsoft SQL Server 2008 Express. Avíseme si necesita más información.

Respuesta

32

Utilice el interruptor -v para pasar en las variables.

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

Luego, en el archivo de 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

En ese caso, es probable que también quieren definir una variable '$ (DBName)' errores para el propio nombre de la base .... –

+0

que estoy recibiendo cuando lo ejecuto: sintaxis incorrecta cerca de 'C:'. La etiqueta 'C' ya ha sido declarada. Los nombres de etiqueta deben ser únicos dentro de un lote de consulta o procedimiento almacenado. – Jeremy

+0

Estoy probando varias cosas, como escapar de las barras o las comillas. ¿Alguna idea de cómo corregir esos errores? – Jeremy

Cuestiones relacionadas