Создание базы хранилища ОД |
Пред. Начало След. |
Скрипт по созданию хранилища (базы данных) первичных оправдательных документов на SQL сервере. Перед выполнением можно изменить имя базы данных и ее местоположение (@cDBPath, @cDBName) в блоке "изменяемые параметры". Все прочие параметры константа. Результатом процедуры создания базы данных должно быть сообщение "Успешно".
После создания хранилища для его применения следует прописать имя базы данных хранилища в настройке "Дерево настроек - НАСТРОЙКИ - Первичные документы - SQL сервер" в формате <имя_SQL_сервера>.<имя_базы>. Для данного скрипта и сервера Xandra значение настройки будет Xandra.FStorage_jpg .
Применение хранилища - см. описание приема платежных документов.
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
|