Создание базы хранилища ОД

Пред.  Начало  След.

  Скрипт по созданию хранилища (базы данных) первичных оправдательных документов на SQL сервере. Перед выполнением можно изменить имя базы данных и ее местоположение (@cDBPath, @cDBName) в блоке "изменяемые параметры". Все прочие параметры константа. Результатом процедуры создания базы данных должно быть сообщение "Успешно".

 

  После создания хранилища для его применения следует прописать имя базы данных хранилища в настройке "Дерево настроек - НАСТРОЙКИ - Первичные документы - SQL сервер" в формате <имя_SQL_сервера>.<имя_базы>. Для данного скрипта и сервера Xandra значение настройки будет Xandra.FStorage_jpg .

 

  Данным скриптом в базе данных будет создан пользователь с логином FStorage , без пароля. После создания базы хранения первичных документов следует убедится в наличии в ней пользователя с таким логином, в случае отсутствия создать его.

 

  Применение хранилища - см. описание приема платежных документов.

 


declare @cLoginName varchar(128), @cPassword varchar(128), @cDBName varchar(128), @cDBPath varchar(100), @exec_stmt nvarchar(4000), @exec_stmt1 nvarchar(4000), @Result int

 

-- изменяемые параметры 

set @cDBPath   = 'd:\MSSQL\DATA\ -- путь к папке на сервере, в которой будут хранится файлы базы данных хранилища

set @cDBName   = 'FStorage_jpg' -- имя базы данных хранилища

----- конец блока изменяемых параметров 

 

-- создание базы 

-- !!! эти параметры не менять !!!

set @cLoginName = 'FStorage'

set @cPassword = ''

 

USE [master]

-- БАЗА

 

if db_id(@cDBName) is null

begin

 print 'Создание базы '''+@cDBName+''''

 select @exec_stmt = 'CREATE DATABASE '+quotename(@cDBName)+' ON  PRIMARY

  (NAME = N'''+@cDBName+'_dat'', FILENAME = N'''+@cDBPath+@cDBName+'.mdf'' , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

  LOG ON

  (NAME = N'''+@cDBName+'_log'', FILENAME = N'''+@cDBPath+@cDBName+'.ldf'' , SIZE = 10240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

  '

 exec sp_executesql @exec_stmt

 

 if db_id(@cDBName) is null

 begin

         print 'Ошибка'

         return

 end

 print 'Успешно'

end

 

-- Логин

if suser_id(@cLoginName) is null

begin

 print 'Создание учетной записи '''+@cLoginName+''''

 

 if left(convert(varchar(30),ServerProperty('ProductVersion')),1) = '8'

         begin

                 select @exec_stmt = 'EXECUTE @nUid = sp_addlogin ''' + @cLoginName + ''',' +

                         case when isnull(@cPassword,'') = '' then '''''' else '' + quotename(@cPassword,'''') +

                         '' end + ',''' + @cDBName + ''', NULL, NULL, NULL'

 

                 exec sp_executesql @exec_stmt, N'@nUid int output', @nUid = @Result output

 

                 IF @Result = 1

                 BEGIN

                         print 'Ошибка'

                         RETURN

                 END

                                         

  end

 else

  begin

                 select @exec_stmt = 'CREATE LOGIN ' + quotename(@cLoginName) + '

                                                         WITH PASSWORD = ' + quotename(isnull(@cPassword,''),'''') + ',

                                                         DEFAULT_DATABASE = ' + quotename(@cDBName) + ',

                                                         CHECK_POLICY = OFF'

                 exec sp_executesql @exec_stmt

 

  end

 

 if suser_id(@cLoginName) is null

 begin

         print 'Ошибка'

         return

 end

 print 'Успешно'

 

end

 

-- user в базе

declare @ExecStmt10 varchar(8000)

 

select @ExecStmt10 = '

declare @cQuery varchar(8000)

 

set @cQuery = ''''

exec(''if object_id(''''FS_create_user'''') is not null drop procedure FS_create_user'')

 

set @cQuery = ''

create procedure FS_create_user

@cLoginName varchar(128)

As

declare @exec_stmt nvarchar(4000)

 

if exists(select * from sysusers where name = @cLoginName)

 begin

         print ''''Пользователь существует!''''

 return

 end

 

if left(convert(varchar(30),ServerProperty(''''ProductVersion'''')),1) = ''''8''''

begin

 -- Добавление пользователя в текущую базу

 select @exec_stmt = ''''EXECUTE sp_grantdbaccess '''' + @cLoginName + '''', NULL''''

 exec sp_executesql @exec_stmt

end else

begin

 select @exec_stmt = ''''CREATE USER ''''+@cLoginName+''''                FOR LOGIN ''''+@cLoginName

 exec sp_executesql @exec_stmt        

 select @exec_stmt = ''''CREATE SCHEMA ''''+@cLoginName+''''        AUTHORIZATION ''''+@cLoginName

 exec sp_executesql @exec_stmt

end

-- Включить в server role db_owner для обмена с банком

select @exec_stmt = ''''EXECUTE sp_addrolemember ''''''''db_owner'''''''', '''' + @cLoginName

exec sp_executesql @exec_stmt''

exec (@cQuery)'

 

--print @ExecStmt10

 

select @ExecStmt10 = 'use '+@cDBName+'

 ' + @ExecStmt10

execute (@ExecStmt10)

execute ('exec '+@cDBName+'..FS_create_user @cLoginName = ' + @cLoginName)

 

print 'База '''+@cDBName+''', учетная запись '''+@cLoginName+''''

 

-- таблица

select @exec_stmt = 'use '+quotename(@cDBName)+'

 if object_id(''dbo.file_storage'') is null

 begin

         print ''Создание таблицы file_storage''

         CREATE TABLE [dbo].[file_storage] (

                 [file_name] [nchar](255) NULL,

                 [doc_id] [nchar](36) NULL,

                 [file_data] [image] NULL,

                 [guid] [uniqueidentifier] NULL

         ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

         create clustered index ix_guid        on [dbo].[file_storage] (guid)

         create index ix_doc_id                        on [dbo].[file_storage] (doc_id)

 

         if object_id(''dbo.file_storage'') is null

                 print ''Ошибка''

         else

                 print ''Успешно''

 end'

 

exec sp_executesql @exec_stmt

 

GO