Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужно создать базу из скрипта  [new]
silart
Member

Откуда:
Сообщений: 12
Добрый день всем!
Я конечно понимаю, что вопрос глупый, но я недавно работаю с Transact SQL.

В общем такая проблема.
Нужно организовать развертывание базы на сервере из скрипта. Скрипт из рабочей базы я получил средствами Мэнэджмент Студии. Вот он скрипт:
USE [master]
GO
DECLARE @data_path nvarchar(256);
DECLARE @p nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
                  
/****** Object:  Database [EmptyTest]    Script Date: 06/03/2011 11:35:49 ******/
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'EmptyTest')
BEGIN

CREATE DATABASE [EmptyTest] ON  PRIMARY 
( NAME = N'EmptyTest', FILENAME = 'C:\Scale\base\EmptyTest.mdf'
,SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'EmptyTest_log', FILENAME = 'C:\Scale\base\EmptyTest_log.ldf'
,SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END
GO
ALTER DATABASE [EmptyTest] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [EmptyTest].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [EmptyTest] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_NULLS OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_PADDING OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [EmptyTest] SET ARITHABORT OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [EmptyTest] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [EmptyTest] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [EmptyTest] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [EmptyTest] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [EmptyTest] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [EmptyTest] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [EmptyTest] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [EmptyTest] SET  DISABLE_BROKER
GO
ALTER DATABASE [EmptyTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [EmptyTest] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [EmptyTest] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [EmptyTest] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [EmptyTest] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [EmptyTest] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [EmptyTest] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [EmptyTest] SET  READ_WRITE
GO
ALTER DATABASE [EmptyTest] SET RECOVERY SIMPLE
GO
ALTER DATABASE [EmptyTest] SET  MULTI_USER
GO
ALTER DATABASE [EmptyTest] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [EmptyTest] SET DB_CHAINING OFF
GO
USE [EmptyTest]
GO
/****** Object:  Table [dbo].[Test]    Script Date: 06/03/2011 11:35:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Test]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Test](
	[id] [uniqueidentifier] NULL,
	[text] [varchar](50) NULL
) ON [PRIMARY]
END
GO
SET ANSI_PADDING OFF
GO

Он был сгенерирован студией. Проблема в том, что в нем указаны жесткие пути к файлам бызы: 'C:\Scale\base\EmptyTest.mdf' и 'C:\Scale\base\EmptyTest_log.ldf'.

В MSDN я нашел такой код, который узнает путь, где обычно хранятся базы на конкретном сервере. Все зависит куда этот сервер поставили.

DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

После этого в операторе CREATE DATABASE мне нужно указать что-то вроде:

FILENAME = @data_path + 'EmptyTest.mdf'
FILENAME = @data_path + 'EmptyTest_log.ldf'.
Но так сделать не получается!!!

Помогите пожалуйста!
3 июн 11, 09:46    [10756994]     Ответить | Цитировать Сообщить модератору
 Re: Нужно создать базу из скрипта  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
где обычно хранятся базы на конкретном сервере


CREATE DATABASE [EmptyTest]


Сообщение было отредактировано: 3 июн 11, 09:56
3 июн 11, 09:53    [10757034]     Ответить | Цитировать Сообщить модератору
 Re: Нужно создать базу из скрипта  [new]
silart
Member

Откуда:
Сообщений: 12
pkarklin,

В смысле? Просто не указывать пути к файлам?
3 июн 11, 10:14    [10757161]     Ответить | Цитировать Сообщить модератору
 Re: Нужно создать базу из скрипта  [new]
silart
Member

Откуда:
Сообщений: 12
Ничего не получается!
Пробовал всяко.
Ругается на инструкцию ALTER DATABASE, расположенную следом.
Подскажите пожалуйста! Что нужно сделать!
3 июн 11, 10:23    [10757221]     Ответить | Цитировать Сообщить модератору
 Re: Нужно создать базу из скрипта  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
silart,

Да, просто не указывать. Как ругается?
3 июн 11, 10:24    [10757234]     Ответить | Цитировать Сообщить модератору
 Re: Нужно создать базу из скрипта  [new]
silart
Member

Откуда:
Сообщений: 12
pkarklin,

Спасибо!
Все получилось! Просто я лишнее удалил!
И правда все создается в папке по умолчанию!
Привожу что получилось:

USE [master]
GO
          
/****** Object:  Database [EmptyTest]    Script Date: 06/03/2011 11:35:49 ******/
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'EmptyTest')
BEGIN
CREATE DATABASE [EmptyTest]
END
GO
ALTER DATABASE [EmptyTest] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [EmptyTest].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [EmptyTest] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_NULLS OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_PADDING OFF
GO
ALTER DATABASE [EmptyTest] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [EmptyTest] SET ARITHABORT OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [EmptyTest] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [EmptyTest] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [EmptyTest] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [EmptyTest] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [EmptyTest] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [EmptyTest] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [EmptyTest] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [EmptyTest] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [EmptyTest] SET  DISABLE_BROKER
GO
ALTER DATABASE [EmptyTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [EmptyTest] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [EmptyTest] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [EmptyTest] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [EmptyTest] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [EmptyTest] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [EmptyTest] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [EmptyTest] SET  READ_WRITE
GO
ALTER DATABASE [EmptyTest] SET RECOVERY SIMPLE
GO
ALTER DATABASE [EmptyTest] SET  MULTI_USER
GO
ALTER DATABASE [EmptyTest] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [EmptyTest] SET DB_CHAINING OFF
GO
USE [EmptyTest]
GO
/****** Object:  Table [dbo].[Test]    Script Date: 06/03/2011 11:35:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Test]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Test](
	[id] [uniqueidentifier] NULL,
	[text] [varchar](50) NULL
) ON [PRIMARY]
END
GO
SET ANSI_PADDING OFF
GO
3 июн 11, 10:32    [10757314]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить