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

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

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

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

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

<hr noshade size=1 style="color : #000000">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

<hr noshade size=1 style="color : #000000">