Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Завершив свою недавнюю доработку легковесной технологии SQL-файл, применяемой для эффективной трансляции файлового SQL-кода в базу данных, автор данной статьи решил в очередной раз представить (в этой заметке) свои реализованные, хотя бы отчасти, идеи касательно программирования MSSQL, а также некоторые соображения относительно применения SQL вообще. Автор полагает, что, несмотря на форму предлагаемой им частной реализации SQL-файл (для MSSQL), лежащая в основе подхода концепция имеет определённую силу и смысл.

В качестве вступления предлагается прочитать короткую заметку о презентации технологии SQL-файл на SQL.RU (от 15 декабря 2020 г.):
Технология SQL-файл (для MSSQL)
https://www.sql.ru/forum/1331783-a/tehnologiya-sql-fayl-dlya-mssql (форум – Microsoft SQL Server).


I. Предыстория (что не так с языком Transact-SQL, расширения SQLCMD и др.)

Автор данной статьи в течение долгого времени взаимодействовал с СУБД MS SQL Server. Когда-то в прошлом к автору данной статьи пришло осознание того, что режим исполнения инструкций (Control Flow) в языке Transact-SQL, который MSSQL предлагает по умолчанию (режим), не является надёжным. Без использования специальных блоков-обёрток для перехвата исключения — необходимо везде-везде проверять состояние последней ошибки @@ERROR. Исходя из желания использовать эффективный (полуавтоматический, с исключениями) контроль ошибок, а также и по другим (тоже веским) причинам, в течение длительного времени вырабатывалась и применялась интересная технология SQL-файл, основанная на расширениях SQLCMD. SQL-код хранится в файлах, организованных специальным образом в виде SQL-проекта (в дереве вложенных файловых папок). Для трансляции файлов в базу данных применяется легковесный обработчик — препроцессор-конкатенатор скриптов: SqlCatPP (EXE) в связке с вызывающей его обёрткой $SqlTrans (CMD). Так же, подразумевается использование вспомогательной библиотеки элементарных хэлпер-объектов и констант (вида “$(<ПеременнаяСреды>)”) SQLAUX (в приложение к основному транслятору/препроцессору). В качестве редактора SQL в настоящее время, помимо встроенного редактора Far-Manager, а также одного из GUI-редакторов для простого текста (см. в загрузках), доступно так же использование SQL Server Management Studio (+Environment), в немного ограниченном, однако, виде (см. устройство “SSMS.cmd” в загрузках).


II. Технология SQL-файл на страницах https://handicraft.remelias.ru/

Вот ссылки на страницы автора статьи (минимальное описание + картинки и примеры):
https://handicraft.remelias.ru/sdk/sql/screenshots_1.html (Скриншот-ы SQL-файл: 1, 2, 3);
https://handicraft.remelias.ru/sdk/sql_file.html (Технология SQL-файл; Список хэлперов SQLAUX);
https://handicraft.remelias.ru/sdk/sql_tools.html (Легковесные инструменты SQL).

Ещё картинки (вспомогательное применение SQL-файл, бок-о-бок файлы SQL/C# и др.):
https://handicraft.remelias.ru/csweb/lightweight_orm.html
https://handicraft.remelias.ru/csweb/screenshots/dev_screenshots_sql.html


II.1. Запуск SQL-файлов с учётом подготовленного окружения

После настройки, проведённой соответствующим образом, легковесных инструментов, появляется возможность “запускать” правильно сконфигурированные (снабжённые лежащим в том же каталоге “$sql_settings.cmd”) файлы кода с усиленным Transact SQL. В Far-Manager подобная трансляция срабатывает (приводится в действие) из панели по <Enter> (для ассоциации SQL), из встроенного редактора по <Ctrl+Enter> (простейший макрос); в отдельном окне (запуск из панели) — по <Ctrl+PgDown>, в отдельном окне (запуск из встроенного редактора) — по <Ctrl+F12>. Утилита $SQLTRANS “подхватывает” “$sql_settings.cmd”; файлы из подкаталогов, как правило, наследуют (и, возможно, расширяют) сеттинг-и (окружение) более высокого уровня расположения. Корневой же “$sql_settings.cmd” подключает, как правило, “SQLAUX.cmd” (из каталога библиотеки), а также “@<имя_проекта>.cmd” (в UTF-8). Запустив же SQL Server Management Studio посредством стартера “SSMS.cmd” (располагается в корне SQL-проекта), данный процесс также получает возможность использовать все тонкости настроенного окружения:
— Доступны слова для обёртки основного блока: $(BEGIN_AUX), $(END_AUX), с автоматической защитой от ошибки (т. н. “заворачивание” в “begin try”/“end try”/ … и т. д.), которые, так же, инициализируют некоторые T-SQL-установки SET (при раскрытии “$(BEGIN_AUX)”);
— Многочисленные ключевые слова и константы: $(LOOP_AUX), $(TRUE_AUX), $(DropFunctionScript_AUX), $(num_IntStrMaxLength_AUX), $(dt_Name_AUX), и т. п.;
— Ссылки на собственные переменные проекта “$(<ИмяПеременной>)”.

Необходимо сначала должным образом установить и настроить поддержку SQL-файл!!!
— При установленном плагин-е для Far Manager CmdCpAuto, появляется возможность комфортно просматривать (по F4) многочисленные CMD (с автоматическим переключением на нужную кодировку).
— После прописывания в системе пути (PATH) к командным утилитам “…\HandicraftSDK\CMD-utilities” (папка с CMD, EXE) — становится работоспособным следующее: $sqltrans.cmd, $sqlupload.cmd, $sql.cmd, $sqlcon.cmd, $sqltocsvexp.cmd и прочие “$”-команды.
— Так же, в системе потребуется определить путь к библиотеке скриптов и констант окружения SQLAUX: SQLAUX_ROOT = …\HandicraftSDK\SQL\SQLAUX.
— При установленных макросах LUA из “HandicraftSDK\CMD-utilities\Shell\Integration(\RU)”, а так же после настройки ассоциаций FAR-а согласно “!Integration of $SqlTrans with FAR Manager.txt” (или “RU\!Интеграция $SqlTrans с FAR Manager.txt”) — всё становится довольно-таки удобным для программирования с применением SQL-файл.

Обратите внимание на папку(и): “HandicraftSDK\CMD-utilities\Shell\Integration(\RU)”.


II.2. Трансляция множеств (файлы SQL)

Помимо простой трансляции отдельного файла, имеется возможность обработать группу / подгруппу SQL. Для запуска подобной трансляции применяются, как правило, простые стартеры CMD. В одну трансляцию могут попадать не только файлы шаблона “*.sql”, но также (при соответствующем запуске $SqlCmd) и сразу несколько подпапок, а также и некоторый специальный SQL-файл. Порядок обработки файлов перестраивается посредством простейших файлов коррекции “$sql_order.list”. Сложные же (составные) трансляции описываются соответствующими CMD-сценариями. Подобные сценарии играют в SQL-файл значительную роль (удаление файла, запрос подтверждения, формирование текстового отчёта, и т. п.)

В загрузке, соответствующей Handicraft-SDK, присутствуют три условных SQL-проекта (перечислены в “SQL-project-list.txt”), а в состав “BookRegistry app.” входит один сложный (из 2-х разнесённых частей) SQL-проект.


II.3. Слабый и сильный препроцессинг (осуществляется подпрограммой SqlCatPP)

При использовании Environment зачастую нормальным будет положиться на поведение базового средства SQLCMD. По умолчанию (при обращении к $SQLTRANS) SqlCatPP (EXE) применяет так называемый “слабый препроцессинг”, затрагивающий одну лишь директиву “:SetVar”. Он попросту добавляет перед ней одну строчку-комментарий: –:SetVar … (чтобы иметь неиспорченную диагностику относительно номера строки ошибки). Однако, когда Вы не взаимодействуете с БД напрямую, а отдаёте свои скрипты дилеру (посреднику), то возникает потребность в тщательной подготовке такого скрипта, с учётом Environment SQL-проекта. (Навряд ли удастся на стороне дилера использовать какие-либо окружения.) В данном случае необходим так называемый “сильный препроцессинг”, который реализуется в SqlCatPP в тестовом виде, затрагивает директивы “:SetVar”, “:r”, а также ссылки на переменные среды: “$(<ИмяПеременной>)”. Результат подобной обработки доступен для примера в подкаталогах $OUTPUT и $GENERATED проектов SQLAUX и “Extralight-ORM test legacy sample (En+Ru)\MyFlat app. (MVC_Razor+TS+ADO+TSQL)\SQL (DB-modelling)”. В состав “sqlaux_library.sql” (из $OUTPUT), например, входят (как минимум) 173 исходных SQL-скрипта (фрагменты с разделителем GO), присутствующие так же и в $GENERATED (с порядковым префиксом имени файла: “XNNN.<BaseFileName>.sql”).

Так же, утилита $SQLTRANS имеет возможность производить фиктивную трансляцию (“set $sqltrans.TranslateToDatabase=0”), выводить данные в текстовый файл результатов (для этого необходимо задать действительный 2-й параметр, например: $SqlTrans “%~n0.sql” “%~n0.txt”), а также поддерживает передачу дополнительных параметров в базовый SQLCMD (например: “set $sqltrans.AdditionalParams=-y0”, “set $sqltrans.ContinueOnBatchError=1”). И не только это (см. страницы, картинки и загрузки).


II.4. Два основных направления в использовании SQL-файл

Технология SQL-файл применяется для достижения следующих 2-х основных целей:

1) Хозяйственная обработка базы данных MSSQL: добавление таблиц, наполнение их данными, правка структуры БД, прочие рутинные операции административного характера. Поскольку всё оформляется в виде файлов, то то или иное действие может быть повторно воспроизведено впоследствии (с соответствующей доработкой скриптов).

2) Программирование в базе данных MSSQL, а именно — написание подсистемы хранимых объектов кода SQL (процедуры, функции, триггеры, представления), которые в терминологии SQL-файл обозначаются как “программатики” (общий термин). Серверную SQL-часть приложения принято, зачастую, генерировать целиком — удалять все (или подгруппу) программатики (соответствующие, например, такому-то именному префиксу) и создавать их заново. (Данное действие можно производить на разных экземплярах сервера и БД, указываемых в корневом “$sql_settings.cmd” соответствующего SQL-проекта.)


III. Небольшая попытка создания экспериментального псевдо-микро-ORM для доступа к своим SQL-запросам и ХП, бок-о-бок файлы (SQL/C#) и прочее

III.1. Техника Side-by-Side (SQL/C#)

В экспериментальных проектах “Client-Server.WEB (idea)” а также “MyFlat app. (MVC_Razor+TS+ADO+TSQL)” была предпринята небольшая попытка непрямого соединения исполняемого SQL-сервером кода Transact-SQL с исполняемым веб-сервером ASP C#-кодом для .NET. В 1-м случае подобный CS-код, так же (с учётом соответствующих директив условной компиляции), работает в браузере (применяется WASM-Blazor), что привносит дополнительные усложнения. Каждый запрос к БД оформляется в виде 2-х рядом лежащих файлов с одним и тем же базовым именем: “<ИмяЗапроса>.sql” и “<ИмяЗапроса>.cs”. В данном случае под SQL-запросом понимается код хранимой процедуры T-SQL, который “попадает” на сервер в момент трансляции SQL-файла, каталога с файлами либо всего большого проекта (с применением $SqlTrans+SqlCatPP).

Соединение SBS-файлов условное (смешения кода нет). Данное исполнение стремится видеть (представлять) SQL-запросы в довольно унифицированной форме: с параметрами ХП, статусом возврата “@Status uniqueidentifier = null out” (параметр), сообщением ошибки “@Message $(dt_Message_AUX) = null out”, с возможными несколькими резалт-сетами. (В последующей неопубликованной версии аналогичного SDK данные параметры имеют, соответственно, имена “@RStatus” и “@RMessage”.)

Легковесный ORM к ХП и SQL-запросам (Handicraft-CODE):
https://handicraft.remelias.ru/csweb/lightweight_orm.html

Попытки успешного смешивания разнородного кода известны. Например: “.razor” и “.cshtml” (смешение HTML+C#) — используются для генерации HTML-разметки посредством C#, с частичной проверкой правильности разметки. При компиляции же SQL-процедуры (например, из файла SQL) — также проводится определённая проверка правильности SQL. Совмещение SQL+CS возможно было бы, в определённой степени, усовершенствовать. Например, в некоторых трудоёмких случаях — использовать объявление параметра (с типом) по месту его применения в теле запроса, “поручив” оформление заголовка(ов) запроса(ов) генератору-препроцессору SQL (добавив в него соответствующую функциональность). Так же, используя специальный вспомогательный формат двойственного (SQL-сервер/SQL-клиент) определения значений и типов, теоретически возможно было бы достичь определённого успеха. Однако, смешивание кода, работающего в совершенно разных средах и местах, навряд ли должно выглядеть просто.

В примере “BookRegistry app.” излишнюю сложность, однако, привносит использование JSON, а также желание надёжно “защититься” (проверки-исключения) от Null-ов на стороне C# (после передачи данных через HTTP в упакованном виде, посредством JSON). В примере же “MyFlat app. (MVC_Razor+TS+ADO+TSQL)” применяется сочетание 2-х языков для наименований: английский (ASP веб-сервер) <=> русский (объекты в SQL-БД).


III.2. Зачем всё это нужно (или же почему не всё так складно в ORM)?

Данный пункт можно отнести к области фантастики. Он предполагает существование возможности вносить изменения/дополнения в некоторую реляционную СУБД, поддерживающую расширяемый диалект языка SQL.

В настоящее время, при доступности применения ORM для взаимодействия с БД, её (одну из ORM) естественно будут использовать очень многие. Несмотря даже на то, что подобное применение зачастую ведёт к определённому перевороту, когда, например, язык C# может быть поставлен выше базы данных, как принято на это смотреть в контексте применения EF Code First, и любое общение/взаимодействие с БД (даже не от имени разрабатываемого приложения) подчиняется уже C# и особенностям Entity Framework (при использовании Code First). А ежели подход с центральным Code First — это востребованное передовое, то всё, что не Code First — уже не годится (не то, что надо) и т. п. Есть и другие причины, также говорящие в пользу применения своих SQL-запросов для общения сервером SQL. (Крупные базы данных, кстати, способны пережить и несколько клиентских фреймворков и ORM.)

Что же касается использования хранимых процедур в БД для приложения, то существует обоснованное мнение, что это (1) не современно, (2) не кроссплатформенно, а также (3) тяжело в поддержке. Поэтому — опять приходим к ORM, большому ORM. (И даже микро-ORM применять, как правило, обычно не рекомендуется.)

Непростая идея компилируемых запросов SQL:

Бок-о-бок файлы (приводятся выше), реализованные автором статьи в экспериментальном виде на базе классических хранимых процедур-запросов MSSQL, могли бы, так же (потенциально), при должной поддержке со стороны СУБД, быть исполнены, по части обработки SQL, в виде так называемых “компилируемых запросов SQL” (Compiled SQL Queries с ограниченным управляемым временем жизни), поддерживаемых гипотетическим SQL-сервером (с функцией Compiled SQL Queries). Компилируемые SQL-запросы возможно было бы унифицировать по части заголовков с параметрами-значениями, параметрами-таблицами, резалт-сет-ами, кодом/статусом/сообщением возврата и т. п. (Т.е. — такие специальные кроссплатформенные по отношению к диалектам SQL заголовки для SQL-запросов.) Хранящийся в SQL-файле клиента SQL-сервера параметризованный код (параметры запроса + клиентская Environment) должен соответствующим образом подготавливаться (“на лету” при первом запуске запроса, или, возможно, на старте приложения):
сначала (на стороне клиента SQL) — применение аналога Environment SQL-проекта;
далее (на стороне клиента) — препроцессинг SQL (раскрытие аналогов переменных среды);
затем — подготовка на SQL-сервере, с проверкой ошибок (компиляция аналога временной ХП с параметрами, со специальным уникальным наименованием временно сохраняемого запроса).

Исправление же кода в файле с SQL-запросом приложения на работающей программе (желательно это делать, конечно, не в части заголовка) — должно восприниматься как необходимость повторной компиляции (когда потребуется) временного запроса: уничтожение/создание временного запроса+имени на сервере SQL.

Таким вот примерно образом автор статьи представляет себе общение с базой данных SQL на языке SQL, со стороны программы (например веб-сервера), использующей какой-либо компилируемый либо скриптовый язык. Для работы такого приложения потребуется технология, подобная SQL-файл (обозначим расширение как “SQL-file-app.”). Компилируемые запросы приложения (SQL-файлы) могли бы заранее (на этапе разработки) проверяться специальными командами трансляции (отсылаться на сервер) на предмет ошибок предварительной подготовки (компиляция запроса на стороне SQL). Более того: базирующиеся на SQL-файлах компилируемые запросы должны быть доступны из папок SQL-проекта для исполнения их отдельно от, собственно, приложения, — как из подготовившего запрос файла сценариев, так и из специального проверочного или хозяйственного SQL-скрипта, работающего в контексте того же (подготовившего запрос) SQL-подключения.

Кроме того, обычная (подобная существующей в исполнении автора статьи, для MSSQL) не расширенная функциональность технологии SQL-файл, также могла бы оказаться весьма полезной для работы вокруг подобного приложения.


IV. Завершение (резюме)

Как было обозначено в начале пункта III.2, то, о чём (в п. III.2) фантазируется автором статьи, весьма удалено от нашей реальности. И всё же (насчёт реальности): несмотря на могущество отдельных диалектов SQL, длительную историю знаменитых СУБД, трудно, в контексте понимания того, как обычно оформляются/выглядят запросы к базе данных (SQL-вкрапления в другую программу, либо посредством драйвера большой и умной ORM, либо же с применением отдельного SQL-файла или объекта с кодом, открываемом в консоли-редакторе БД), — трудно называть SQL первосортным языком программирования, который мы можем полноценно поддерживать (с тем же комфортом, что и классические языки ОП), когда применяем SQL для взаимодействия с БД из кода приложения или из отдельного скрипта.


Китаев Сергей Юрьевич
Автор ресурса Handicraft-CODE
https://handicraft.remelias.ru/

Блог автора (Handicraft-CODE):
https://blog-hc.remelias.ru/

Оригинальная версия статьи в авторском блог-е:
Технология SQL-файл, препроцессор для T-SQL, “бок-о-бок” файлы и др.
https://blog-hc.remelias.ru/sql-file-technology-pp-for-t-sql-sbs-files-etc/

Технология SQL-файл на сайте автора:
https://handicraft.remelias.ru/sdk/sql_file.html
https://handicraft.remelias.ru/sdk/sql_tools.html
https://handicraft.remelias.ru/sdk/sql/screenshots_1.html
https://handicraft.remelias.ru/sdk/sql/screenshots_2.html
https://handicraft.remelias.ru/sdk/sql/screenshots_3.html

— — —
4 сен 21, 09:56    [22367793]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
aleks222
Member

Откуда:
Сообщений: 1682
Кратко можно сказать: что именно я получу, если прочитаю это множество букв?
4 сен 21, 10:16    [22367798]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8962
Автор, видимо, хейтит использование VS и изобретает велосипед.
4 сен 21, 11:03    [22367811]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сотрудник Главного Управления
Member

Откуда: Главное Управление
Сообщений: 109
я ни фига не понял, но очень интересно !
4 сен 21, 13:04    [22367829]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1873
Сергей Китаев,

приведите пример в чем будет явный профит использования вашего "велосипеда" в сравнении с стандартной проливкой powershell/vbs/etc + sqlcmd?

Из всего вышеописанно мне пока видится что ТС боролся с граблями проливки хреново написанных сценариев обновлений для конкретных систем, но проблема именно в конкретно хреновых сценариях а не технологии общения с СУБД.

Сообщение было отредактировано: 4 сен 21, 14:54
4 сен 21, 15:00    [22367852]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
aleks222,

Краткий способ прочтения мне видится следующим:
1) II.4. Два основных направления в использовании SQL-файл;
2) Презентация SQL-файл на SQL.RU, начальное сообщение;
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248193
3) https://handicraft.remelias.ru/sdk/sql/screenshots_1.html (наименования + картинки 1);
) https://handicraft.remelias.ru/sdk/sql/screenshots_2.html (наименования + картинки 2);
) https://handicraft.remelias.ru/sdk/sql/screenshots_3.html (наименования + картинки 3).
4) Два занятных вопроса (SQL.RU, от 16 декабря 2020 г., форум - Microsoft SQL Server) – опционально к прочтению:
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248841
5) Картинки все-все смотреть не обязательно (их там немало будет). Потом (если не утомительно) — уже оставшаяся часть основной статьи “Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.”.

Изучая скриншот-ы следует обращать внимание на специально подобранные (чтобы были достаточно ёмкими) наименования картинок. Тема большая, в одной заметке сразу всё не обозначишь, а картинка — сразу много слов заменяет. Автор (т. е. я) хотел сказать, что: посмотрите, пожалуйста, есть такая вот (не бесполезная, кстати) штука (технология SQL-файл с её простыми открытыми утилитами), — быть может Ваш взгляд и зацепится за что-нибудь интересное. Однако, если всё так уж сразу коробит, то лучше не стоит утруждаться-читать. SQL-файл несёт в себе некоторые преимущества, разумеется. Можно, например, более оперативно исполнять скрипты. Можно использовать свои, а так же подобранные автором (библиотека SQLAUX) расширения T-SQL. Но есть, помимо простой пользы, и другая составляющая, от слов идея, велосипед, и т. п.

— — —
4 сен 21, 15:31    [22367855]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Владислав Колосов,

При наличии тяжеловесной VS (Microsoft Visual Studio) у MS (Microsoft) имеется, так же, Visual Studio Code (на базе Electron). Однако, автор не склонен приравнивать работу в SSMS (SQL Server Management Studio, на базе VS) к программированию на Transact-SQL (T-SQL). SSMS, кстати, тоже в определённой степени совмещается с технологией SQL-файл. Замечу, так же (про SSMS), что запущенная (“start …Ssms.exe…”) специальным стартером (“SSMS.cmd” или какой Вам угодно), который для неё подготовит определённую Environment, данная IDE (её процесс) получает соответствующие установки (переменные среды). Ежели включена галочка: “Сервис::Параметры::Выполнение запроса::SQL Server::Общие::По умолчанию открывать новые запросы в режиме SQLCMD”, то, помимо ссылок “$(<ИмяПеременной>)”, становится доступным, так же, ещё и подключение (директивой “:r …”) какого-нибудь SQL-файла с константами вида “:SetVar …” (если хотите). Всё это у MS естественным образом доступно при использовании SQLCMD, а так же при интеграции с ней (и даже из SSMS IDE). Утилита же $SQLTRANS способна (помимо прочего) автоматически добавлять (конкатенацией) головной скрипт к любой трансляции (именуемый, как правило, “$sql_settings.sql”).

— — —
4 сен 21, 15:40    [22367856]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Сотрудник Главного Управления,

““
я ни фига не понял, но очень интересно !
””
Вы правы, есть здесь кое-что интересное.
Для первоначального интуитивного ознакомления рекомендуется облегчённый просмотр, подобно тому, как я это обозначил в ответе на на самый 1-й комментарий (см. выше).
Посмотрите, пожалуйста: Краткий способ прочтения мне видится следующим: … (см. выше, для aleks222).
Для более детального понимания — читатель может (ежели пожелает) исследовать соответствующие загрузки (Handicraft-CODE).

— — —
4 сен 21, 15:52    [22367857]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
aleks222
Member

Откуда:
Сообщений: 1682
Сергей Китаев
aleks222,

Краткий способ прочтения мне видится следующим:
1) II.4. Два основных направления в использовании SQL-файл;
2) Презентация SQL-файл на SQL.RU, начальное сообщение;
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248193
3) https://handicraft.remelias.ru/sdk/sql/screenshots_1.html (наименования + картинки 1);
) https://handicraft.remelias.ru/sdk/sql/screenshots_2.html (наименования + картинки 2);
) https://handicraft.remelias.ru/sdk/sql/screenshots_3.html (наименования + картинки 3).
4) Два занятных вопроса (SQL.RU, от 16 декабря 2020 г., форум - Microsoft SQL Server) – опционально к прочтению:
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248841
5) Картинки все-все смотреть не обязательно (их там немало будет). Потом (если не утомительно) — уже оставшаяся часть основной статьи “Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.”.

Изучая скриншот-ы следует обращать внимание на специально подобранные (чтобы были достаточно ёмкими) наименования картинок. Тема большая, в одной заметке сразу всё не обозначишь, а картинка — сразу много слов заменяет. Автор (т. е. я) хотел сказать, что: посмотрите, пожалуйста, есть такая вот (не бесполезная, кстати) штука (технология SQL-файл с её простыми открытыми утилитами), — быть может Ваш взгляд и зацепится за что-нибудь интересное. Однако, если всё так уж сразу коробит, то лучше не стоит утруждаться-читать. SQL-файл несёт в себе некоторые преимущества, разумеется. Можно, например, более оперативно исполнять скрипты. Можно использовать свои, а так же подобранные автором (библиотека SQLAUX) расширения T-SQL. Но есть, помимо простой пользы, и другая составляющая, от слов идея, велосипед, и т. п.

— — —


Извини, дарагой, такое бессмысленное многословие намекает на фуфло.
4 сен 21, 16:22    [22367861]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
felix_ff
Сергей Китаев,

приведите пример в чем будет явный профит использования вашего "велосипеда" в сравнении с стандартной проливкой powershell/vbs/etc + sqlcmd?

Из всего вышеописанно мне пока видится что ТС боролся с граблями проливки хреново написанных сценариев обновлений для конкретных систем, но проблема именно в конкретно хреновых сценариях а не технологии общения с СУБД.

Я, собственно не критикую имеющиеся обработчики сценариев. Напротив, хороший обработчик сценариев — неотъемлемая часть подхода, подобного SQL-файл. Ежели реализовывать технологию, что называется, по-взрослому, то не лишней будет поддержка набора определённых типовых действий в виде собственного текстового формата для сценария трансляции SQL (а так же и для соединения нескольких SQL-трансляций), плюс (что обязательно) выход на команды/расширения системы. Быть может (не полностью уверен), всё это возможно решить при помощи какого-нибудь из известных кроссплатформенных скриптовых языков (для сценариев).

Но технология SQL-файл — это не только одни сценарии, подобные CMD/PS/и т. п. Она скорее от слова “SQL-проект” — автономный, однако и доступный для интеграции (FAR, GUI-редактор простого текста, редактор SSMS). Чтобы понять набор её замыслов, необходим хотя бы облегчённый просмотр: основные 2 направления, плюс именованные картинки, плюс кое-что из статьи и т. д. К тому же (насчёт PS/VBS/и т. д.) — не всё так дружественно при взаимодействии с SQLCMD. Автор SQL-файл (т. е. я) пытается предложить некоторую унификацию для соединения-общения с базовой утилитой от MS: исходный(ые) файл(ы) SQL => $SQLTRANS => SQLCMD. Я осмысленно не стал “отрываться” от SQLCMD (например, используя ADO.NET + C#), поскольку SQLCMD предоставляет уйму известных в документации параметров поведения (есть примеры в основной статье: “set $sqltrans.AdditionalParams=…”), и представленная здесь реализация SQL-файл — конкретно для MSSQL и Transact-SQL. Основных направлений у моей технологии — два: (1) административно-хозяйственное и (2) программирование объектов БД (т. н. “Программатики”), активной подсистемы (ХП, функции, триггеры, представления) или приложения (его программной SQL-части, хранимой внутри БД).

Но есть в статье, так же, кое-что и про взаимодействие с БД из приложения, а именно подход с “бок-о-бок” файлами (Side-by-Side). Для понимания замысла необходимо (помимо прочтения небольшого пункта III.1 в тексте статьи) рассмотреть картинки-код (SQL+CS) со следующей страницы: https://handicraft.remelias.ru/csweb/lightweight_orm.html (Lightweight ORM to SP and queries, см. side-by-side). Но в этой теме Вы уже навряд ли встретите непосредственный профит.

— — —
4 сен 21, 17:19    [22367873]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
aleks222
Сергей Китаев
aleks222,

Краткий способ прочтения мне видится следующим:
: : : : :
— — —


Извини, дарагой, такое бессмысленное многословие намекает на фуфло.

То, что Вы здесь пока что отобразили, скорее эмоции, aleks222.
— — —
4 сен 21, 17:35    [22367880]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
aleks222
Member

Откуда:
Сообщений: 1682
Сергей Китаев
aleks222
пропущено...


Извини, дарагой, такое бессмысленное многословие намекает на фуфло.

То, что Вы здесь пока что отобразили, скорее эмоции, aleks222.
— — —


Это суровая реальность.
Если человек не может внятно, в двух-трех предложениях, изложить "чаво он такое сотворил" - 101% за то, что король голый.
4 сен 21, 18:20    [22367887]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1873
Сергей Китаев
felix_ff
Сергей Китаев,

приведите пример в чем будет явный профит использования вашего "велосипеда" в сравнении с стандартной проливкой powershell/vbs/etc + sqlcmd?

Из всего вышеописанно мне пока видится что ТС боролся с граблями проливки хреново написанных сценариев обновлений для конкретных систем, но проблема именно в конкретно хреновых сценариях а не технологии общения с СУБД.

Я, собственно не критикую имеющиеся обработчики сценариев. Напротив, хороший обработчик сценариев — неотъемлемая часть подхода, подобного SQL-файл. Ежели реализовывать технологию, что называется, по-взрослому, то не лишней будет поддержка набора определённых типовых действий в виде собственного текстового формата для сценария трансляции SQL (а так же и для соединения нескольких SQL-трансляций), плюс (что обязательно) выход на команды/расширения системы. Быть может (не полностью уверен), всё это возможно решить при помощи какого-нибудь из известных кроссплатформенных скриптовых языков (для сценариев).

Но технология SQL-файл — это не только одни сценарии, подобные CMD/PS/и т. п. Она скорее от слова “SQL-проект” — автономный, однако и доступный для интеграции (FAR, GUI-редактор простого текста, редактор SSMS). Чтобы понять набор её замыслов, необходим хотя бы облегчённый просмотр: основные 2 направления, плюс именованные картинки, плюс кое-что из статьи и т. д. К тому же (насчёт PS/VBS/и т. д.) — не всё так дружественно при взаимодействии с SQLCMD. Автор SQL-файл (т. е. я) пытается предложить некоторую унификацию для соединения-общения с базовой утилитой от MS: исходный(ые) файл(ы) SQL => $SQLTRANS => SQLCMD. Я осмысленно не стал “отрываться” от SQLCMD (например, используя ADO.NET + C#), поскольку SQLCMD предоставляет уйму известных в документации параметров поведения (есть примеры в основной статье: “set $sqltrans.AdditionalParams=…”), и представленная здесь реализация SQL-файл — конкретно для MSSQL и Transact-SQL. Основных направлений у моей технологии — два: (1) административно-хозяйственное и (2) программирование объектов БД (т. н. “Программатики”), активной подсистемы (ХП, функции, триггеры, представления) или приложения (его программной SQL-части, хранимой внутри БД).

Но есть в статье, так же, кое-что и про взаимодействие с БД из приложения, а именно подход с “бок-о-бок” файлами (Side-by-Side). Для понимания замысла необходимо (помимо прочтения небольшого пункта III.1 в тексте статьи) рассмотреть картинки-код (SQL+CS) со следующей страницы: https://handicraft.remelias.ru/csweb/lightweight_orm.html (Lightweight ORM to SP and queries, см. side-by-side). Но в этой теме Вы уже навряд ли встретите непосредственный профит.

— — —


Еще раз, что бы читать статью по какому то продукту лично я должен понимать для каких задач используется данное решение.
Что в нем есть такого чего нет в решениях сторонних вендоров. В чем его преимущества перед ними.

Вы же пока оперируете некими абстракциями которым сами дали определение ("программатики"/"конкатенатор скриптов"/"трансляции" и.т.д). Это все хорошо наверное, но это не несет никакой смысловой нагрузки тем кто не знаком с продуктом, (а для некоторых кто знаком с СУБД наоборот может вызвать некое отторжение).

Прежде всего вы как разработчик должны были описать на какие задачи нацелено ваше решение, в чем их профит, в чем удобство. Уже непосредственно если человек заинтересуется вашей технологией он сам начнет углубляться в статьи, ознакамливаться с продуктом и.т.д.

А пока вы написали много текста, предлагаете почитать много информации про продукт, но не написали главного - для чего это все? И почему некая программная обертка над sqlcmd должна быть лучше самого sqlcmd?
Если вы трактуете ваш SQL-файл как некий sql-проект, чем он лучше проекта базы данных VS?

Сообщение было отредактировано: 4 сен 21, 19:15
4 сен 21, 19:24    [22367895]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
PizzaPizza
Member

Откуда:
Сообщений: 435
Я б сделал более популярное и case oriented представление всего вот этого вот. Такое впечатление, что вы пытаетесь статью из научного журнала опубликовать на форуме, но абстракт к статье не написали вообще.
4 сен 21, 20:15    [22367904]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
PizzaPizza
Member

Откуда:
Сообщений: 435
Сергей Китаев
технологии SQL-файл

Ну и на заметку - для русскоязычных читателей название технологии в тексте без склонений/спряжений выглядит как опечатка.
Сергей Китаев

применение SQL-файл
4 сен 21, 20:19    [22367905]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Насчёт целей SQL-файл в примерах

= I.=
Рассуждения о различных проектах (организация трансляции группы файлов)

Давайте посмотрим, как организован проект VS для C#. Большинству программистов .NET известно расширение “.csproj”. Многие представляют, как выглядит упрощённая конфигурация SDK-проекта для VS (это такой минималистический XML). Кое-кто так же знает, что можно с помощью “.user”-файла подключить так же “.targets”, “.props”, а быть может и ещё кое-что (с более высокого уровня расположения, например). И это всё почти одинаково работает как в VS IDE, так и непосредственно через MSBUILD (компиляция в консоли).

Что из себя представляет проект VS Code? В подпапке “.vscode” C#-проекта: “tasks.json” (описывает, как компилировать внешним средством, со ссылками опять же на “.csproj”) и “launch.json” (информация о том, как следует запускать EXE). Для меток "build", "watch", "publish" видим: "command": "dotnet". Т.е. VS Code не сама всё обрабатывает, а через команду DOTNET (а уже внутри DOTNET, быть может, и через ядро от MSBUILD). Её редактор кода, вообще-то, не на 100% синхронизирован с компиляцией C# внешним средством (используется т. н. наблюдатель).

В SQL-файл (наименование — намеренно в именительном падеже, чтобы не путать название технологии с именно файлами, как существительным во мн. числе) для проекта применяются совсем простые сеттинг-и, переменные среды (“set …=…”). Однако, помимо корневых “$sql_settings.cmd” и “@<имя_проекта>.cmd”, кое-что может добавляться/перекрываться и на других уровнях. Используется примитивная, однако, весьма мощная древовидная структура сеттинг-ов (“$sql_settings.cmd” в каждой подпапке проекта на любом уровне). А то, что трансляция базируется на SQLCMD, так это и не плохо (подобно VS/MSBUILD или VS Code + DOTNET). Прежде чем отправить что-либо в SQLCMD, исходный код проходит через слабый (по умолчанию) препроцессинг и конкатенацию SQL-скриптов (осуществляются подпрограммой “SqlCatPP.exe”), с промежуточным результатом-файлом в профильной папке TEMP (как источник для SQLCMD). Подход надёжный, эффективный, гибкий. Препроцессор-конкатенатор поддерживает различные опции. И утилита $SQLTRANS, если просто запустить “$sqltrans.cmd” в Wndow-Explorer (без параметров) — тоже выведет на консоль, на что способна (поддерживаемые параметры, переменные конфигурации, простые примеры вызова). Вы можете видеть синтаксис (JPeg-картинки) всех утилит и обёрток касательно SQL: $sqltrans, $sqlupload, $sql, $sqlcon, $sqltocsvexp, SqlCatPP (все в лежат в моём Яндекс.Диск-е в подпапке “Утилиты (картинки)”). Кстати, “SqlToCsvExport.exe” (подпрограмма, вызываемая из “$sqltocsvexp.cmd”) не взаимодействует с SQLCMD, а использует ADO.NET. Скриптовая библиотека хелпер-объектов Transact-SQL: https://yadi.sk/d/S-VLJSbEpZYROg (SQLAUX - ссылка на Яндекс.Диск, см. “Утилиты (картинки)”).

= II.=
Примеры сложных и простых проектов SQL-файл как демонстрация её возможностей

Насчёт целей применения технологии SQL-файл: могу привести пример нетривиального проекта SQLAUX. Его (или проект подобный SQLAUX) не просто было бы поддерживать и обрабатывать другими средствами/инструментами/утилитами.

Вот ссылка на папку “Библиотека SQLAUX” (на Яндекс.Диск). Там внутри, помимо синтаксиса командных утилит, приводятся кое-какие фрагменты SQL для объектов библиотеки SQLAUX (точнее одной из её прошлых версий): “Имплементация объектов T-SQL”, “API (псевдо-заголовки SQL)”, “Картинки”.
Скриптовая библиотека хелпер-объектов Transact-SQL:
https://yadi.sk/d/S-VLJSbEpZYROg (ссылка на Яндекс.Диск)
Список хелперов SQLAUX (ссылка на Handicraft-CODE):
https://handicraft.remelias.ru/sdk/sql_file.html#sqlaux_programmatics
Следующим образом выглядит трансляция всех функций SQLAUX (отдельно от ХП):
https://handicraft.remelias.ru/sdk/sql/screenshots_1.html#sqlaux_functions_in_one_go_img
Там, в SQLAUX, много SQL-объектов: 173 шт.
Всё, однако, доступно для трансляции в самых различных вариациях:
отдельный файл из редакторов (FAR, GUI, SSMS);
отдельный файл из панелей FAR-а (как в в окне Far Manager, так и во внешней консоли);
все объекты почти каждой из подпапок (на любом уровне);
все процедуры / все функции / все вспомогательные таблицы;
удаление процедур / удаление функций / удаление вспомогательных таблиц;
составная трансляция всего (SQLAUX): процедуры + функции + таблицы;
удаление всего (SQLAUX): -процедуры -функции -таблицы;
подготовка листинга объектов SQLAUX.
Объекты SQLAUX располагаются в подпапках: “Auxiliary tables”, “Functions”, “Procedures”.
Папки “Functions” и “Procedures” внутри себя содержат другие подпапки (ещё один уровень).

В качестве шаблона пользовательского проекта средней сложности можно заимствовать “MyFlat app. (MVC_Razor+TS+ADO+TSQL)\SQL (DB-modelling)”, исправив “$sql_settings.cmd” (как “set generate_project_output=0” и “set generate_project_source=0”), а также изменить наименование “@flat_owner_cabinet.cmd” (а во всех CMD: “flat_owner_cabinet” => “<имя_проекта>”).

Присутствуют так же и совсем простые примеры (т. н. “мелкие SQL-проекты”):
HandicraftSDK\SQL\Programming samples (SQL-file)\**” (содержит 5 мелких примеров):
GUID-list generation”, “Lists downloading (sys-info)”, “Nested transaction test”, “Trigger test”, “Uploading to DB (used buildings)”.

См.: “HandicraftSDK\SQL-project-list.txt” (примеры SQL -файл в Handicraft-SDK).
А также (CSWEB): “BookRegistry\SQL (DB-modelling)\**” и “BookRegistry\SHARED\$ClientServer\!DB-queries (application SP)\**” (загрузка “BookRegistry app.”).
В общем, немало там интересных примеров разной сложности (в загрузках).
Подобное (с той же или подобной функциональностью поддержки, оперативностью трансляции), возможно (мне думается), было бы затруднительно увидеть в других средах.

= III.=
Так же (как ещё одна из целей), ранее упоминалось, что в SQL-файл возможно использовать вариант т. н. “усиленного T-SQL” (за счёт раскрытия переменных вида “…_AUX”, или же из собственной альтернативной библиотеки пользователя).

Как-то вот так, насчёт целей и примеров.

— — —
5 сен 21, 02:02    [22367945]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
L_argo
Member

Откуда:
Сообщений: 1517
Многословно отвечу:

В целом тема актуальна и злободневна. Нужна в каждом проекте.
Я тоже подобным озаботился.
У меня есть фреймворк, для создания десктопных КИС и в нем есть модуль для оперативной работы с SQL.

Там можно:
* Одновременно работать с неск. разными проектами.
* Подтягивать из БЛОБов и файлов SQL-тексты. Выполнять их с применением @параметров или подстановок $(...)
* Нырять в ХП и функции, альтерить их. Получать SQL-код описания таблиц с индексами.
* Получать выпадающие списки процедур, ф-ций, таблиц и полей таблиц. На лету подставлять их в SQL-текст.
* Хранить для разных проектов комментарии к таблицам и их полям (см. предыд.пункт).
* Мгновенно вставлять в позицию заранее подготовленные фрагменты кода (н-р описание и использование курсора, списки полей и пр.)
* Получать списки зависимостей между объектами БД.
* Просматривать содержимое таблиц (просто по слову в позиции курсора).
* Открывать селекты и редактировать полученные рекордсеты. Есть локальная фильтрация и удобная навигация.
* Заменять ID министравочниками ключ/значение для удобства редактирования а-ля комбобокс.
* Делать массовые замены значений в колонках.
* Для группы записей датасета выполнять sql-оператор с подстановкой значений из этого датасета.
* Для БЛОБов есть возможность сохранить или загрузить содержимое из файла /в файл.
* Экспорт датасета в буфер/плоский файл с возможностью настройки форматов вывода (флоаты/даты/булеаны)
* Механизм сохранения SQL-скриптов объектов и выгрузка их в другую БД (create или alter).

У меня этот инструмент практически вытеснил SSMS.
6 сен 21, 10:33    [22368232]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
L_argo,

Спасибо за Ваш комментарий!
Скажите, пожалуйста, а данное произведение, быть может, нацелено не только на MSSQL? Т. е., кроссплатформенность (разные серверы SQL) — предполагается? А так же, имеется ли какое-нибудь открытое описание либо демонстрация продукта?
6 сен 21, 12:03    [22368285]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
SQL-файл как конструктор

Технология SQL-файл представляет из себя набор компонентов (доступных, в определённой мере, для изменения пользователем), не имеющий, однако, особо центрального (сверхярко выраженного среди других по важности) модуля. Наиболее монолитной в данном смысле частью SQL-файл (в Handicraft-SDK) является подпрограмма SqlCatPP.exe. Все части, в определённой степени, полезны и необходимы. Ежели попытаться составить список всего клиентского набора (всё, что не на стороне SQL-сервера), то вместе с базовыми системными (не предусматривающими, как правило, модификации со стороны пользователя) программами, получится примерно следующий перечень составляющих элементов клиентского ядра (см. ниже: I, II, III).

Наиболее точное определение замысла SQL-файл можно обозначить как настраиваемый и расширяемый конструктор SQL-проектов. Важным является то, как SQL располагается в файлах: в соответствующей подпапке, с должными сеттинг-ами, во встроенном в определённый порядок обработки SQL-файле. Файл должен лежать как можно “правильнее”, однако и код, сохраняемый в нём (объект БД и прочее) получает определённые преимущества. Сам же конструктор тоже подвластен для изменения пользователем. Существует возможность исправления любой составляющей конструктора, заимствованной из Handicraft-SDK. (Исходники EXE также присутствуют в пакете: “HandicraftSDK\Auxiliary programs (sources)”). Конструктор становится понятным и полезным, когда в него начинаешь “играть” (т. е. в разной степени применять). Доступны как минимальные, так и более сложные примеры.

= I.=
Компоненты SQL-файл из пакета Handicraft-SDK:

— Утилита трансляции скриптов $SQLTRANS (CMD);
— Препроцессор-конкатенатор скриптов SqlCatPP (EXE);
— Прочие CMD: $SQLUPLOAD, $SQL, $SQLCON, $SQLTOCSVEXP;
— Прочие EXE: SqlToCsvExport, ConfirmationPause, TypeInColor;

— Плагин Far Manager CmdCpAuto для открытия CMD в нужной кодировке;
— Макросы LUA для настройки соответствующего поведения FAR-а, а так же другие инструкции от слов интеграция+оболочка (“CMD-utilities\Shell\Integration\**”);

Сеттинг-и в шаблонах SQL-проектов, как многочисленные примеры файлов “$sql_settings.cmd” (а так же “$sql_settings.sql”);
— Простые и сложные сценарии-команды в виде многочисленных примеров; (новый SQL-проект, как правило, заимствует большинство своих CMD);

— Вариант простого расширения SQL (т. н. “усиленный T-SQL”) со стороны библиотеки SQLAUX, в виде набора дополнительных ключевых слов-расширений (от автора SQL-файл и SQLAUX);
— Хэлпер-объекты T-SQL из пространства “AUX:…”: скалярные функции (137 шт.), табличные функции (3 шт.), хранимые процедуры (28 шт.);

— Набор работающих примеров/шаблонов разной степени сложности, с приложением бекап-а (BAK-файл) и образа (MDF+LDF) тестовой БД (“TEST”).

Описательные файлы псевдо-заголовков объектов SQLAUX а так же доступных слов/типов/констант расширенного SQL смотрите в каталоге “HandicraftSDK\SQL\SQLAUX\API (headers)”. Возможна минимальная зависимость от SQLAUX, без обращения к её программатикам в БД, а лишь использование отдельных её “слов” (переменные “$(…_AUX)”).


= II.=
Базовая (не изменяемая) часть SQL-файл (системные зависимости):

SQLCMD как базовый транслятор предварительно обработанного скрипта (с поддержкой разделителя/повторителя батчей GO, обработкой директив “:SetVar …”, “:r …” и т. п., раскрытием переменных/констант в SQL “$(<ПеременнаяСреды>)”). Данная программа MS вызывается из: $SQLTRANS, $SQLUPLOAD, $SQL, $SQLCON.
BCP — вызывается из $SQLUPLOAD;
DOTNET 4.0 — зависимость для SqlCatPP.exe, SqlToCsvExport.exe, ConfirmationPause.exe, TypeInColor.exe;

Far Manager 3 — SQL-файл IDE — основной командный пульт (доступен, так же, и Windows Explorer), редактор с подкраской синтаксиса (SQL, CMD, TXT), поддержка плагин-ов (CmdCpAuto.dll) и макросов LUA (“CMD-utilities\Shell\Integration(\RU)”);

Командный процессор CMD (т. н. “legacy”, т. е. унаследованный в ОС Windows, не подвержен проблеме изменения версий).


= III.=
Ниже приводится пример лишь одного из перечней доступных “слов” (из файла-описателя “SQLAUX\API (headers)\#SQL_extensions.AUX.sql”).
См. так же: “#Constants.AUX.sql”, “#Data_types.AUX.sql” (другие подобные перечни слов с комментариями).

Насчёт потребности в т. н. “обёртке основного блока” для T-SQL, представленной в SQLAUX словами “$(BEGIN_AUX)”, “$(END_AUX)”, можно взглянуть (прочитать как предисловие) на следующую заметку из прошлой темы: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248841 Два занятных вопроса (SQL.RU, от 16 декабря 2020 г., форум - Microsoft SQL Server).


*** СЛОВА ИЗ “#SQL_extensions.AUX.sql” (ПЕРЕЧЕНЬ-ПРИМЕР): ***
[[
NOP_AUX, LOOP_AUX, TRUE_AUX, FALSE_AUX, YES_AUX, NO_AUX, SUCCESS_AUX, FAILURE_AUX, FLOAT_1_AUX,

BEGIN_AUX, BEGIN_WITH_XACT_ABORT_ON_AUX, BEGIN_WITH_XACT_ABORT_OFF_AUX, BEGIN_WITHOUT_XACT_ABORT_AUX, END_AUX, BEGIN_TRANSACTION_AUX, COMMIT_TRANSACTION_AUX, COMMIT_OPEN_LT_AUX,

ROLLBACK_TRANSACTION_AUX, ROLLBACK_OPEN_LT_AUX, ROLLBACK_UNCOMMITTABLE_LT_AUX,

INITIAL_TRANCOUNT_AUX, IS_IN_OPEN_LT_AUX, RESET_OPEN_LT_FLAG_AUX,

IS_XACT_ABORT_ON_AUX, IS_NUMERIC_ROUNDABORT_ON_AUX, IS_CONCAT_NULL_YIELDS_NULL_ON_AUX, IS_ANSI_NULL_DFLT_OFF_ON_AUX, IS_ANSI_NULL_DFLT_ON_ON_AUX, IS_NOCOUNT_ON_AUX, IS_QUOTED_IDENTIFIER_ON_AUX, IS_ARITHIGNORE_ON_AUX, IS_ARITHABORT_ON_AUX, IS_ANSI_NULLS_ON_AUX, IS_ANSI_PADDING_ON_AUX, IS_ANSI_WARNING_ON_AUX, IS_CURSOR_CLOSE_ON_COMMIT_ON_AUX, IS_IMPLICIT_TRANSACTIONS_ON_AUX, IS_DISABLE_DEF_CNST_CHK_ON_AUX,

XACT_ABORT_AUX, NUMERIC_ROUNDABORT_AUX, CONCAT_NULL_YIELDS_NULL_AUX, ANSI_NULL_DFLT_OFF_AUX, ANSI_NULL_DFLT_ON_AUX, NOCOUNT_AUX, QUOTED_IDENTIFIER_AUX, ARITHIGNORE_AUX, ARITHABORT_AUX, ANSI_NULLS_AUX, ANSI_PADDING_AUX, ANSI_WARNING_AUX, CURSOR_CLOSE_ON_COMMIT_AUX, IMPLICIT_TRANSACTIONS_AUX, DISABLE_DEF_CNST_CHK_AUX,

TEST_IMPLEMENTATION_AUX, BEGIN_TEST_AUX, END_TEST_AUX, BEGIN_NONTEST_AUX, END_NONTEST_AUX,
META_IMPLEMENTATION_AUX, BEGIN_META_AUX, END_META_AUX, BEGIN_NONMETA_AUX, END_NONMETA_AUX,

LAQUO_AUX, RAQUO_AUX, LANG_AUX, RANG_AUX, LSQM_AUX, RSQM_AUX, LDQUO_AUX, RDQUO_AUX, BULL_AUX, MIDDOT_AUX, PLUSMN_AUX, HELLIP_AUX, DEG_AUX, SECT_AUX, COPY_AUX, REG_AUX, MDASH_AUX, NDASH_AUX, CR_AUX, LF_AUX, CR_LF_AUX, NL_AUX, NLNL_AUX,

LARROW_AUX, RARROW_AUX, BACKSLASH_AUX, $(_BACKSLASH_AUX),

NewLineAndErrorMessage_AUX, AppendErrorMessageLine_AUX, AppendScriptLine_AUX
]]

— — —
6 сен 21, 13:21    [22368331]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
L_argo
Member

Откуда:
Сообщений: 1517
Сергей Китаев
L_argo,

Спасибо за Ваш комментарий!
Скажите, пожалуйста, а данное произведение, быть может, нацелено не только на MSSQL? Т. е., кроссплатформенность (разные серверы SQL) — предполагается? А так же, имеется ли какое-нибудь открытое описание либо демонстрация продукта?
Пока нацелено только на МССКЛ, хотя коннекты и запросы возможны к другим СУБД (но без зачитки метаданных).
Это пет-проект, поэтому описания нет.


Ваш проект меганаворочен, ИМХО. Поэтому интерес к нему будет мизерным.
6 сен 21, 14:49    [22368378]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
L_argo,

Минимальный скрипт/проект в SQL-файл — совсем не сложный. Нетривиальный CMD (в кодировке OEM / UTF-8 без BOM), знаменитый и могучий Far Manager, командная консоль и т. п., может быть выглядит это всё (со стороны) и не очень, однако работать способно довольно чётко. Это был ранее (долгое время) мой личный проект с периодическими доработками, используемый для постоянного рутинного взаимодействия с рабочими БД (расчёт квартирной платы) и, как инструментарий, для поддержки сохраняемого в SQL-файлах (для хранимых объектов БД) кода нескольких приложений квартплаты. Я не ожидаю, в данном случае, популярности. Это такая вот “кустарная” (handicraft) технология SQL-файл (в текущей её реализации).

— — —
6 сен 21, 17:33    [22368514]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Почему в своём обработчике SQL-скриптов не стоит отказываться от взаимодействия с SQLCMD

Ежели предположить, что кто-то собирается написать свой собственный обработчик скриптов T-SQL, предназначенный не столько для использовании его приложениями, а для применения на этапе разработки и при администрировании БД (т. е. самые различные запросы), то он (разработчик транслятора SQL), по всей видимости, столкнется с проблемой обнаружения разделителя батчей GO (или подобного альтернативного разделителя). Данное весьма короткое (по умолчанию) слово может содержаться, так же, и в тексте комментария, и присутствовать в строчных литералах '…' / "…". Правильное его обнаружение (а делать это желательно максимально похоже на то, как на это “смотрит” обработчик MS) может представлять определённую трудность. Возможно, конечно, применять вместо GO некий собственный “заметный” (удобный для обнаружения) специальный разделитель (например $END или $END_OF_SCRIPT). GO, кстати, может в SQLCMD идти и с повторителем (0/1/2/…). Так же (насчёт широких возможностей SQLCMD), помимо разделителя батч-ей имеется потребность в директивах: “:SetVar …”, “:r …” и др., которые тоже необходимо воспринимать совместимо с тем, как это делает MS. И т. п.

Скрипты могут быть непростыми для разбора: комментарии, участки строкового литерала и т. п. Скрипты же с динамическими подзапросами (формирование строки подзапроса EXEC) могут оказаться коварными для специального (не от MS) обработчика T-SQL. В SqlCatPP по умолчанию включен т. н. “слабый препроцессинг” (см. ранее п. II.3. основной статьи). Сильный же препроцессинг (реализован в режиме тестирования), если это особо не требуется, включать не рекомендуется! А именно: не следует без необходимости использовать сеттинг “set SqlCatPP.ProcessDirectives=1”; желательно поставить в начале строки префикс комментария “rem …” (рекомендуется), либо установить параметр-опцию в значение 0. (В т. ч. — и в проектах SQLAUX и “MyFlat app. (MVC_Razor+TS+ADO+TSQL)”, где это в целях демонстрации включено.) Данная опция НЕ проверялась на “понимание” сложных скриптов!

Так же, доступно специальное отключение и для слабого режима препроцессинг-а (явно: “set SqlCatPP.InsertSetVarComments=0” и “set SqlCatPP.UnfoldEnvironmentVars=0”), для SqlCatPP . Препроцесинг-и НЕ тестировались на сложных скриптах! Однако, в слабом режиме — намного мешая вероятность неудачи (ошибки) или иной досадной неприятности с подобной предварительной обработкой SQL. На обычной же сложности примерах-скриптах (таких как в Handicraft-SDK и не только) слабый препроцессинг SQL работает успешно.

— — —
6 сен 21, 18:13    [22368534]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
L_argo
Member

Откуда:
Сообщений: 1517
У меня тоже есть реакция на ГО. Но он должен быть строго в начале строки.
7 сен 21, 09:34    [22368664]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
SqlCatPP и SQLCMD

SqlCatPP это, во-первых, конкатенатор, а также (в зависимости от настроек-опций) и препроцессор. SQL-файл (в текущем исполнении) прежде всего полагается на SQLCMD, в том числе и касательно батч-ей T-SQL с применением разделителя GO. Т.е. SqlCatPP НЕ обрабатывает GO!

Подобную команду можно видеть при т. н. запуске “list_programmatics.sql”:
[[
>> SqlCmd -S"(local)" -d"TEST" -i"C:\Users\serg\AppData\Local\Temp\$SQLTRANS\20210907_122616_89.sql" -o"C:\Users\serg\AppData\Local\Temp\$SQLTRANS\20210907_122616_89.txt" -b -w65535 -u

* Executing SQL ...
=== LIST OF PROGRAMMATICS (SQLAUX LIBRARY): ===

Stored procedures
----------------------------------------------------------------------------------------------------
AUX:DropFunction
AUX:DropFunctions
AUX:DropProcedure
AUX:DropProcedures
: : : : :
]]

По умолчанию SQLCMD получает, так же (помимо параметров и др. ключей), ключ “-b (terminate batch job if there is an error)”. Однако, если установить “set $sqltrans.ContinueOnBatchError=1”, то ключ “-b” передаваться не будет. Можно, так же, передавать в SQLCMD и другие параметры (“set $sqltrans.AdditionalParams=…”).

Т.о. SqlCatPP не пытается заменить всё то, что умеет (на стороне клиента SQL-Server) многофункциональная утилита SQLCMD от MS.

— — —
7 сен 21, 12:56    [22368791]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
PizzaPizza
Я б сделал более популярное и case oriented представление всего вот этого вот. Такое впечатление, что вы пытаетесь статью из научного журнала опубликовать на форуме, но абстракт к статье не написали вообще.

15 декабря 2020 г. на SQL.RU, в форуме Microsoft SQL Server, автор данной статьи писал (в прошлом) примерно следующее:
Технология SQL-файл (для MSSQL)
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1331783&msg=22248193
[[
Добрый день, уважаемые разработчики SQL!

Позвольте представить Вашему вниманию самодельную легковесную технологию, именуемую как SQL-файл (или же SQL в файлах), — для MSSQL и T-SQL. Данная методика успешно применялась в течение достаточно долгого периода для программирования БД расчёта квартирной платы (город Воронеж). Технология базируются на известной утилите SQLCMD и командном процессоре CMD. В качестве IDE (командный пульт SQL + оперативный редактор) эффективно применяется Far Manager 3, со вспомогательными простейшим плагином и макросами. (Также, возможно задействование других редакторов SQL, помимо встроенного в FAR.)

Идея состоит в том, чтобы поддерживать исходный код и/или вспомогательные скрипты в виде SQL-файлов в директориях, транслируя их в базу данных, по отдельности либо группами. Используя утилиту $SQLTRANS и соответствующие шаблоны, можно настроить трансляцию (генерацию) большого количества объектов БД, работающую, так сказать, на раз-два-три. За один приём, например, возможно обновить активную составляющую программы в базе (процедуры, функции, представления, …), или, скажем, создать табличную структуру (и наполнить её некоторым количеством необходимых данных). При умелом обращении подсистема (активные объекты) может вполне свободно корректироваться даже на работающей программе/службе.

: : : : :

Вместе с командными утилитами и шаблонами предлагается возможное (опционально) использование так называемого Усиленного Transact-SQL, с препроцессором (на базе переменных среды), представленного множеством соответствующих импорт-определений и широким набором хелпер-объектов прилагаемой библиотеки SQLAUX (полезные программатики).

: : : : :
]]
Вышеприведённое является вступлением к настоящей теме.


Не случайно MS предлагает свою утилиту SQLCMD, — для тех, кого SQL интересует с точки зрения трансляции файлов. (Подобные консольные средства существуют и для других СУБД.) Но, как было упомянуто в завершении основной статьи, автор скептически смотрит на то, как принято (было ранее и сейчас) хранить, применять и поддерживать SQL-код (и не только в MSSQL). Несмотря на существование в VS “Database project”, автор статьи не считает уместным сравнивать с данной формой свои проекты SQL-файл, где оригинальным источником кода для БД всегда являются именно файлы (усиленный SQL, окружение на базе CMD, “$sql_order.list”), а их тщательно настраиваемая обработка возможна даже (в отдельных случаях) и без подключения к серверу данных, например ради подготовки другого(их) результирующего(их) файла(ов). (Включение режима фиктивной трансляции: “set $sqltrans.TranslateToDatabase=0”.) Статья же намеренно подавалась как слегка приближенная к фантастике, поскольку для воплощения дальнейшей идеи, обозначенной как “SQL-file-app.” (см. в п. III.2 основной заметки), потребуется уже определённая поддержка со стороны сервера SQL (т. е. кое-какая доработка СУБД).

— — —
7 сен 21, 22:32    [22369043]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
L_argo
Member

Откуда:
Сообщений: 1517
Это многобуквие мало кому интересно. В т.ч. и с технологической стороны.
8 сен 21, 10:17    [22369111]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
L_argo
Это многобуквие мало кому интересно. В т.ч. и с технологической стороны.

Так он и код программный кому-то – “многобуквие”. Смотря как смотреть.

С технической точки зрения “компилируемые SQL-запросы” (на лету, с обработкой, из файлов приложения) вполне-таки возможны, без внедрения в EXE/DLL, с доступностью для коррекции тела запроса на работающей программе/службе. T-SQL поддерживает, например, инструкцию “SET PARSEONLY { ON | OFF }” (предварительная проверка подготовленного скрипта). Так же, имеются в MSSQL и временные (в “tempdb”) хранимые процедуры “#…” / “##…” (для хранимых временно запросов). Однако, для действительно полноценной (не компромиссной) реализации того, что в п. III.2 обозначено как Compiled SQL Queries, может оказаться уже недостаточно имеющихся стандартных (классические параметры запроса и пр.) возможностей любого из SQL.

Всё остальное, к чему тут приводились многочисленные слова, — отнюдь не фантастика.

— — —
8 сен 21, 13:01    [22369242]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Сборник заметок по технологии SQL-файл располагается в авторском блог-е:
https://blog-hc.remelias.ru/ (Handicraft-CODE blog).
10 сен 21, 12:54    [22370339]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.  [new]
msLex
Member

Откуда:
Сообщений: 9386
Сергей Китаев
Сборник заметок по технологии SQL-файл располагается в авторском блог-е:
https://blog-hc.remelias.ru/ (Handicraft-CODE blog).


Модератор: Сообщения в одной теме достаточно. Удалил из второй.
10 сен 21, 12:58    [22370342]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить