2009-10-28 14 views
21

Deseo crear un script SQL que cree una base de datos. En este momento, tengo esto:CREAR BASE DE DATOS utilizando el archivo en la ruta predeterminada

CREATE DATABASE [Documents] ON PRIMARY 
(NAME = N'Documents', FILENAME = N'Documents.mdf') 
LOG ON 
(NAME = N'Documents_log', FILENAME = N'Documents_log.ldf') 
COLLATE SQL_Latin1_General_CP1_CI_AS 

Sin embargo, esto genera el siguiente error:

Msg 5105, Level 16, State 2, Line 2 
A file activation error occurred. The physical file name 'Documents.mdf' may be incorrect. Diagnose and correct additional errors, and retry the operation. 
Msg 1802, Level 16, State 1, Line 2 
CREATE DATABASE failed. Some file names listed could not be created. Check related errors. 

Sé que el problema es que no se hayan indicado ruta de acceso completa de los nombres de archivo. Pero quiero poder ejecutar este script independientemente de la estructura del directorio del servidor de la base de datos. ¿Hay alguna forma de usar una ruta predeterminada?

Respuesta

20

Puede crear una base de datos sin especificar los detalles del archivo, como:

crear documentos de base de datos;

+7

Cierto, pero ¿qué sucede si necesito especificar atributos adicionales como SIZE y FILEGROWTH? He visto las soluciones usando XP para leer el registro, pero ¿qué ocurre si no se está ejecutando en la instancia predeterminada? Esa clave/valor de registro no daría la respuesta correcta. Todavía buscando, así que realmente no considero esto respondido por mí mismo. –

+6

después de crear la base de datos, agregue modificar la secuencia de comandos de la base de datos para especificar atributos adicionales como TAMAÑO y ARCHIVO DE ARCHIVO. –

1

Eche un vistazo a cómo crear un Default Path. Vea si ayuda con lo que está buscando.

Saludos,

+0

proost !, prost !, santé, saludo, salud !, živjeli !, kippis! – Roel

1

yo creo que se puede hacer

CREATE DATABASE [Documents] 

sin la EN .... y que será creado con valores predeterminados relativos a la trayectoria y el resto.

51

Crea la base de datos 'Documentos' y dale propiedades de archivo a través de una modificación.

USE [master] 
GO 

CREATE DATABASE [Documents] 
GO 

ALTER DATABASE [Documents] MODIFY FILE 
(NAME = N'Documents', SIZE = 512MB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
GO 

ALTER DATABASE [Documents] MODIFY FILE 
(NAME = N'Documents_log', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10%) 
GO 

Este script es más portátil y se puede implementar en varios servidores sin ninguna modificación.

+5

Para mí, ESTA es la solución en lugar de la marcada. –

3

Ver How do I find the data directory for a SQL Server instance?

Si está utilizando SQL Server 2012 o superior, se puede encontrar la ruta predeterminada usando

select 
    InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'), 
    InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath') 

continuación, puede utilizar exec() para construir su instrucción CREATE DATABASE.

Esto es útil si desea que los nombres de los archivos físicos de su base de datos sean diferentes del nombre predeterminado.

+0

Gracias. Sin embargo, ¿cómo uso esto en el script CREATE DATABASE? Ejecutando CREATE DATABASE [Documents] (NAME = N'Documents ', FILENAME = @InstanceDefaultDataPath + N'Documents.mdf' ... da un error - no se puede concatenar el resultado de su consulta con la DB dame dentro de un CREATE Script DATABASE – DaveBoltman

Cuestiones relacionadas