Команда USE
Подключение к серверу СУБД и выполнение команд в контексте соответствующей базы данных осуществляется при помощи команды USE. Параметром этой команды является строка подключения к базе данных в формате URL. Команда является блочной, то есть она обособляет собой блок команд DaJet Script, которые имеют собственную область видимости объявления переменных.
Команды USE могут быть вложены друг в друга!
Синтаксис команды USE выглядит следующим образом:
USE '<provider>://[<username>:<password>@]<server>[:<port>]/<database>[?mdex]'
<statements>
END -- конец блока команд USE
<provider> - провайдер (драйвер) для подключения к СУБД.
На данный момент поддерживаются два провайдера баз данных:
- mssql - Microsoft SQL Server
- pgsql - PostgreSQL
<username> - (опционально) имя (логин) пользователя базы данных.
<password> - (опционально) пароль пользователя базы данных.
<server> - сетевой адрес сервера СУБД.
<port> - (опционально) порт сервера СУБД.
<database> - имя базы данных на сервере СУБД.
mdex - (опционально) включение поддержки расширений 1С:Предприятие 8.
Внимание! Поддержка расширений 1С:Предприятие 8 имеет экспериментальный характер.
Имя пользователя и пароль могут не указываться в тех случаях, когда используется встроенная аутентификация операционной системы. Например, данный вид аутентификации пользователей широко используется, например, в среде Windows при работе с Microsoft SQL Server.
Порт сервера может не указываться в тех случаях, когда используется порт, используемый провайдером по умолчанию. Например, для Microsoft SQL Server это - 1433, а для PostgreSQL - 5432.
Строка подключения к базе данных указывается в формате URL, следовательно, все специфические символы, например в пароле пользователя, должны быть указаны в URL-кодировке.
Строка подключения к базе данных может представлять собой динамически вычисляемый шаблон, аналогично пути к файлу скрипта в команде EXECUTE. Шаблон строки подключения включает в себя переменные или обращения к свойствам объектов типа object
для динамической подстановки значений (переменные шаблона). Эти переменные заключаются в фигурные скобки {
и }
(смотри пример ниже).
1. Пример простой строки подключения без указания логина и пароля пользователя:
-- Подключение к Microsoft SQL Server, используя Windows аутентификацию
DECLARE @record object
USE 'mssql://server/database'
SELECT TOP 1 Код, Наименование
INTO @record
FROM Справочник.Номенклатура
END
PRINT JSON(@record)
-- Результат выполнения скрипта
[2024-10-12 20:11:50] {"Код":"MS-001","Наименование":"Товар MS-001"}
2. Пример строки подключения c указанием логина и пароля пользователя:
-- Подключение к PostgreSQL
DECLARE @record object
USE 'pgsql://postgres:postgres@localhost:5432/database'
SELECT TOP 1 Код, Наименование
INTO @record
FROM Справочник.Номенклатура
END
PRINT JSON(@record)
-- Результат выполнения скрипта
[2024-10-12 20:11:50] {"Код":"PG-001","Наименование":"Товар PG-001"}
3. Пример использования динамического шаблона строки подключения:
Предположим, что у нас есть административная база данных под управлением SQL Server, где мы храним настройки для подключения к другим базам данных. Непосредственно к самой административной базе данных мы подключаемся при помощи Windows аутентификации.
DECLARE @КодУзла string = 'РИБ-0002'
DECLARE @УзелСсылка entity
DECLARE @Настройки object
DECLARE @Запись object
DECLARE @Выборка array
-- Административная база данных SQL Server
USE 'mssql://server/database'
-- Получаем ссылку на узел плана обмена по коду РИБ-0002
SET @УзелСсылка = SELECT Ссылка
FROM ПланОбмена.ПланОбменаРИБ
WHERE Код = @КодУзла
-- Получаем настройки для подключения к базе данных узла плана обмена
SET @Настройки = SELECT АдресСервера, БазаДанных, Логин, Пароль
FROM РегистрСведений.НастройкиПодключений
WHERE УзелИнтеграции = @УзелСсылка
END -- Конец блока и контекста SQL Server
-- Выводим полученные настройки в лог программы
PRINT 'Настройки: ' + JSON(@Настройки)
-- Подключаемся к базе данных по настройкам и выполняем простую команду выборки данных
USE 'pgsql://{@Настройки.Логин}:{@Настройки.Пароль}@{@Настройки.АдресСервера}/{@Настройки.БазаДанных}'
SELECT TOP 3 Код, Наименование
INTO @Выборка
FROM Справочник.Номенклатура
END -- Конец блока и контекста PostgreSQL
-- Выводим результат в лог программы
FOR @Запись IN @Выборка
PRINT JSON(@Запись)
END
-- Результат выполнения скрипта
[2024-10-12 20:28:34] Настройки: {"АдресСервера":"localhost:5432","БазаДанных":"database","Логин":"postgres","Пароль":"postgres"}
[2024-10-12 20:28:34] {"Код":"PG-001","Наименование":"Товар PG-001"}
[2024-10-12 20:28:34] {"Код":"PG-002","Наименование":"Товар PG-002"}
[2024-10-12 20:28:34] {"Код":"PG-003","Наименование":"Товар PG-003"}
Совет: используя команду EXECUTE, можно инкапсулировать получение настроек в отдельный скрипт. Вызов такого скрипта может выглядеть ниже следующим образом.
DECLARE @КодУзла string = 'РИБ-0002'
DECLARE @Настройки object
EXECUTE 'file://get-db-settings.djs' WITH УзелОбмена = @КодУзла INTO @Настройки