Создание базы хранилища ОД
Скрипт по созданию хранилища (базы данных) первичных оправдательных документов на 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">