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

Откуда:
Сообщений: 22
Добрый день, уважаемые разработчики SQL!

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

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

Обзорное минимальное описание SQL-файл доступно на страницах Handicraft-CODE (англ. язык):
https://handicraft.remelias.ru/sdk/sql_file.html (Handicraft-CODE :: Handicraft-SDK :: SQL-file technology);
https://handicraft.remelias.ru/sdk/sql_tools.html (Handicraft-CODE :: Handicraft-SDK :: CMD-utilities :: SQL-tools).

А также, см. скриншот-ы:
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

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

Помимо краткого обзорного описания и многочисленных скриншот-ов, на страницах доступны соответствующие загрузки 7-Zip:
1) Handicraft Toolkit — объединяющий пакет;
2) Handicraft-SDK — ремесленный SDK;
3) BookRegistry app. — Client-Server.WEB (идея);
4) TEST (DB) — копия БД.

Страницы с загрузками (технология SQL-файл, а также связанное с БД):
https://handicraft.remelias.ru/sdk/handicraft_sdk.html (Handicraft-SDK);
https://handicraft.remelias.ru/csweb/client_server_web.html (Client-Server.WEB);
https://handicraft.remelias.ru/handicraft_code.html (Handicraft-CODE).

Домен https://handicraft.remelias.ru (Handicraft-CODE), кроме технологии SQL-файл, содержит также разнообразные экспериментальные примеры программирования (.NET, .Win32, WASM и др.).

Спасибо за внимание!
15 дек 20, 12:56    [22248193]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7606
Сергей Китаев
Идея состоит в том, чтобы поддерживать исходный код и/или вспомогательные скрипты в виде SQL-файлов в директориях, транслируя их в базу данных
git/svn/mercurial +
flyway/liquibase/etc. чем не подошли? Для них даже не надо создавать десятки переменных среды, хватит и меньшего количества.
15 дек 20, 13:20    [22248207]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8941
Ценность этого продукта для потребителя сомнительна, ввиду вполне удобной для разработчика бесплатной MS Visual Studio Community и поддержки оной того же GIT.
15 дек 20, 13:39    [22248219]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Это (насчёт ценности) — смотря как смотреть. Если исходить из того, что всё, что не в Visual Studio — это не ценно, тогда так как Вы говорите. Ежели под ценностью понимать независимость от Visual Studio (и когда не очень-таки радует SSMS везде-везде), тогда другое дело. Данная реализация SQL-файл достаточно простая (современные вещи, конечно же должны делаться, что-называется, по-взрослому). Ценность, однако, представляет больше идея, которую можно по-разному исполнить. Моё личное применение SQL-файл — вполне эффективно. Библиотека SQLAUX, например, содержащая более 150 объектов (Х.П., функции и пр.) компилируется (уничтожается-создаётся в БД) за считанные секунды. Разнообразное хозяйственное/испытательное/отладочное занятие в БД (правка объектов, включая таблицы, индексы, ключи) — вполне-таки приемлемо, а также позволяет повторить потом подобные действия (когда всё сохраняется в файлах). Насчёт же презентабельной реализации продукта, это всегда хорошо. SQL-файл (как он есть) может оказаться полезным лишь для некоторого потребителя, недовольного предлагаемыми возможностями, поведением и особенностями работы в Visual Studio и SSMS.
15 дек 20, 14:41    [22248272]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

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

Это (насчёт ценности) — смотря как смотреть. Майкрософт SQL-Server Management Studio а также Visual Studio конечно же позволяют делать очень разнообразные вещи. Однако, мне не думается, что они столь же пригодны в том смысле, для чего предназначена SQL-файл. Продолжение ответа смотрите далее, в следующем ответе форума: “Re: Технология SQL-файл (для MSSQL)” (Сергей Китаев, 15 декабря 2020 г. в 14:41).
15 дек 20, 15:12    [22248301]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4222
Сергей Китаев
Добрый день, уважаемые разработчики SQL!
Спасибо за внимание!



В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД IBM System R, для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД. Аббревиатура SEQUEL расшифровывалась как Structured English QUEry Language — «структурированный английский язык запросов». Позже по юридическим соображениям[4] язык SEQUEL был переименован в SQL. Когда в 1986 году первый стандарт языка SQL был принят ANSI (American National Standards Institute), официальным произношением стало [,es kju:' el] — эс-кью-эл. Несмотря на это, англоязычные специалисты зачастую продолжают читать SQL как сиквел (по-русски часто говорят «эс-ку-эль»).

Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования[5]. Собственно разработкой языка запросов занимались Дональд Чэмбэрлин (Donald D. Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost-based optimizer), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.
15 дек 20, 15:13    [22248304]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7606
Сергей Китаев,
7) Cyrillic code collection (in Russian) named SQL_RU

Плагиат!

Так и не смог осознать ценности данного продукта и области его применения.

Для контроля исходников гит + флайвей перекрывают по функционалу полностью.

Механизм редактирования сильно уступает SSMS, как минимум в части inellisense, просмотре планов и прочим прелестям live query. Насколько удобно для работы с query store, extended events и прочими подобными фишками - тоже не понял.

Просто набор скриптов с дополнительной обвязкой?
15 дек 20, 15:37    [22248326]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
Владислав Колосов, у VS есть ряд существенных недостатков
1. Поддержка новой функциональности MS SQL Server в SSDT появляется с существенной задержкой.
2. Поддержка гетерогенных сред рудиментарна (например, попробуйте опубликовать из VS гетерогенный проект для MS SQL + PostgreSQL).
3. Поддержка других платформ оставляет желать лучшего. Удовольствие от запуска виртуалки для VS, если и MS SQL Server, и вся среда разработки на Linux - ниже среднего.

Другое дело, что аналогичную задачу я давно успешно решаю при помощи GNU make и C препроцессора. Первый управляет сборкой и публикацией, а второй "собирает" файлы проекта по директориям, предоставляя заодно возможности макроопределений.
15 дек 20, 15:44    [22248330]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

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

Пробовали вы вести разработку в VS SSDT?

Какие ключевые преимущества (и недостатки) у вашей "технологии SQL-файл" по сравнению с SSDT?
15 дек 20, 15:46    [22248331]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
Владислав Колосов, у VS есть ряд существенных недостатков
1. Поддержка новой функциональности MS SQL Server в SSDT появляется с существенной задержкой.
2. Поддержка гетерогенных сред рудиментарна (например, попробуйте опубликовать из VS гетерогенный проект для MS SQL + PostgreSQL).
3. Поддержка других платформ оставляет желать лучшего. Удовольствие от запуска виртуалки для VS, если и MS SQL Server, и вся среда разработки на Linux - ниже среднего.

Другое дело, что аналогичную задачу я давно успешно решаю при помощи GNU make и C препроцессора. Первый управляет сборкой и публикацией, а второй "собирает" файлы проекта по директориям, предоставляя заодно возможности макроопределений.

Какой из перечисленный вами недостатков решает вышеописанная "технология"?
15 дек 20, 15:48    [22248335]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex
ptr128

1. Поддержка новой функциональности MS SQL Server в SSDT появляется с существенной задержкой.

Какой из перечисленный вами недостатков решает вышеописанная "технология"?

Пункт 1.

ptr128
аналогичную задачу я давно успешно решаю при помощи GNU make и C препроцессора

А это решает все три.
15 дек 20, 15:52    [22248340]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex
пропущено...

Какой из перечисленный вами недостатков решает вышеописанная "технология"?

Пункт 1


Т.е. поддержка новых фичей SQL Server в этой тулзе происходит раньше?
Можно пару примеров?
15 дек 20, 15:54    [22248344]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex,
К моменту выхода MS SQL 2016 VS 2017 еще не было. А с VS 2016 получили следующие проблемы:
1. Создать native compiled функции возможности не было.
2. При наличии в БД хотя бы одного разрешения GRANT EXECUTE ANY EXTERNAL SCRIPT TO ... публикация из VS висла наглухо.
15 дек 20, 16:01    [22248348]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex,
К моменту выхода MS SQL 2016 VS 2017 еще не было. А с VS 2016 получили следующие проблемы:
1. Создать native compiled функции возможности не было.
2. При наличии в БД хотя бы одного разрешения GRANT EXECUTE ANY EXTERNAL SCRIPT TO ... публикация из VS висла наглухо.


А в этой утилите поддержка уже была?
15 дек 20, 16:02    [22248350]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex, она слишком тупа, чтобы такое анализировать. Какой код ей скормили - тот и деплоит, без излишнего publish preview, как в VS )
15 дек 20, 16:04    [22248353]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex, она слишком тупа, чтобы такое анализировать. Какой код ей скормили - тот и деплоит, без излишнего publish preview, как в VS )


В SSDT так же можно деплоить часть кода без анализа через pre/postdeploy sctipts
15 дек 20, 16:09    [22248359]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex, прошу прощения, Вы предлагаете деплоить без publish preview ВЕСЬ код? Расскажите подробней, пожалуйста, как это сделать в SSDT, если проект уже есть и там сотни объектов без всяческих IF EXISTS, ALTER и т.п.
ptr128
При наличии в БД хотя бы одного разрешения GRANT EXECUTE ANY EXTERNAL SCRIPT TO ... публикация из VS висла наглухо.
15 дек 20, 16:13    [22248363]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex, прошу прощения, Вы предлагаете деплоить без publish preview ВЕСЬ код? Расскажите подробней, пожалуйста, как это сделать в SSDT, если проект уже есть и там сотни объектов без всяческих IF EXISTS, ALTER и т.п.
ptr128
При наличии в БД хотя бы одного разрешения GRANT EXECUTE ANY EXTERNAL SCRIPT TO ... публикация из VS висла наглухо.

С учетом того, что в этой тулзе так и сделано, то переход на нее по трудозатрам ни чуть не меньше чем (а скорее всего и больше) такого же подхода в SSDT.
Это если сравнивать эту тулзу с SSDT.


PS
Если что, мы так не делаем, а деплоим именно через deploy.
15 дек 20, 16:34    [22248388]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
env,
Здравствуйте!

Вам не понравилось наличие сокращений SQL и RU в наименовании старинного архива: “HandicraftSDK\Old-Legacy\SQL_RU (sample collection).7z”? Там нет плагиата, от слова вообще. Архив содержит примеры SQL-файл в ту пору, когда она была исполнена на кириллице (как “*.sql” так и “*.cmd”), причём довольно специфические вещи. Библиотека РуХелперы.SQL, например, это кириллический предшественник SQLAUX. Неудобно было применять для папки громоздкое но понятное англоязычное SQL_Cyrillic_Russian или подобное (кириллица ведь разная бывает).

SQL-файл (в ее текущем исполнении) не всем должна нравиться, поскольку некоторые привычные вещи становятся, к сожалению, недоступными. Возможно и существуют какие-то великолепные инструменты, способные оперативно и качественно исполнять скрипты из файлов, как выборочно, так и группами, — Вам видней. Far Manager, вообще-то, тоже довольно неплохая вещь, когда требуется запускать различные build-ы, подправлять всякие там сценарии и т. п.
15 дек 20, 16:35    [22248390]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex,
Вы прикалываетесь? Я подобный переход на make + С препроцессор сделал меньше, чем за час. Правда с учетом того, что сам toolchain и все необходимые макросы для обертки объектов у меня уже были.

А вот "такой же подход в SSDT" подразумевает уже перенос всего кода в PosDeployment, что и за день не сделаешь.
15 дек 20, 16:42    [22248397]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex,
Вы прикалываетесь? Я подобный переход на make + С препроцессор сделал меньше, чем за час. Правда с учетом того, что сам toolchain и все необходимые макросы для обертки объектов у меня уже были.

А вот "такой же подход в SSDT" подразумевает уже перенос всего кода в PosDeployment, что и за день не сделаешь.


не нужно переносить в PosDeployment весь код, он поддерживает ссылки на файлы вида
:r sqlscript.sql
которые так же могут содержать подобные ссылки.

т.е. в идеале, postdeployment script может содержать что-то вроде
:r base_version.sql
:r version1_diff.sql
:r version2_diff.sql


Начальная версия скриптов будет отличаться от SSDT только массовой заменой create ... на if object_id is null create ....




Но разговор все же не об этом, а о "Технология SQL-файл", там то что есть для работы с БД?
15 дек 20, 16:54    [22248409]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7606
Сергей Китаев,

Там ещё смайлик был, чтобы показать, что фраза про плагиат - шутка.

Выборочное выполнение скриптов обычно не настолько интересно, как накатить изменения на разные контуры без потерь и с учётом их порядка применения. Для этого и существуют такие инструменты как liquibase/flyway в связке с системами контроля версий.

Возможно, инструмент удобен для администрирования, но тогда вопрос по функционалу - что он покрывает? Какие сценарии, какие операции?
15 дек 20, 16:58    [22248415]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex, я в курсе, что можно использовать множество файлов.
А вот утверждая, что можно обойтись только массовой заменой CREATE, Вы глубоко заблуждаетесь. Потому что метаданные могут меняться. Причем могут не только добавляться поля таблицы, но так же меняться CONSTRAINT-ы, что для предлагаемого Вами подхода вообще печально.
После чего Вы становитесь вынужденными или руками прописывать все эти IF ... DROP/ALTER/CREATE, или все же взвоете и станете использовать подсистему сборки отличную от SSDT, в которой подобные процессы более-менее автоматизированы.
Что будет логичным, так как толку от SSDT, когда весь код деплоится через PostDeployment - НИКАКОГО. Берете в зубы Atom и радуетесь после убогого VS )))
15 дек 20, 17:05    [22248427]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
А вот утверждая, что можно обойтись только массовой заменой CREATE, Вы глубоко заблуждаетесь

Если вы прочитаете внимательно, то увидите, что я говорил а начальном преобразовании нормального SSDT проекта в "PostDeployment-проект", дальнейшие изменения структуры конечно нужно будет дописывать alter скриптами. Так же, надо полагать, работает "технология" ТС-а

Выше же я говорил, что мы так не делаем, а пользуемся deploy. Неразрешимых проблем у нас при этом не возникало.
15 дек 20, 17:18    [22248438]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
[quot msLex#22248438]
ptr128
Выше же я говорил, что мы так не делаем, а пользуемся deploy. Неразрешимых проблем у нас при этом не возникало.

Вот и расскажите всем, как надо было решать проблему, когда deploy SSDT 2016 глухо виснет при наличии хотя бы одного GRANT EXECUTE ANY EXTERNAL SCRIPT в целевой БД.
15 дек 20, 17:24    [22248446]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
msLex
Выше же я говорил, что мы так не делаем, а пользуемся deploy. Неразрешимых проблем у нас при этом не возникало.

Вот и расскажите всем, как надо было решать проблему, когда deploy SSDT 2016 глухо виснет при наличии хотя бы одного GRANT EXECUTE ANY EXTERNAL SCRIPT в целевой БД.

Если никакие настройки деплоя не помогают (ignore permissions и т.п.), не использовать эту фичу до появлении поддержки на стороне SSDT.

Сообщение было отредактировано: 15 дек 20, 17:23
15 дек 20, 17:27    [22248450]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
msLex
не использовать эту фичу до появлении поддержки на стороне SSDT.

А если это требование бизнеса, которому R Service жизненно необходим? Разрывать контракт и платить неустойку?
15 дек 20, 17:37    [22248457]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7606
ptr128,

Это случаем не тот баг для которого можно было сначала явный revoke в качестве workaround сделать?
15 дек 20, 17:56    [22248472]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
msLex
Member

Откуда:
Сообщений: 9378
ptr128
Разрывать контракт и платить неустойку?


Оценивать возможность выполнения контракта до а не после подписания не предлагать?


PS
Переход на новую версию SQL Server сразу после ее релиза так себе затея.
15 дек 20, 18:01    [22248473]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
env, он самый. Но такой workaround применим был только если это можно было сделать по бизнес процессу. Когда клиент на R Service гоняет модели, выполнящиеся десятки часов и в любой произвольный момент хотя бы одна такая модель считается, за REVOKE могут и по башке настучать. Больно...

msLex, да не оцените Вы все. Не реально это. К тому моменту 2016 сервер только вышел. Еще preview. Клиент R Service гонял на нем месяц от силы, очень обрадовавшись такой возможности. MS же в know issues эту проблему вообще включил только через несколько месяцев после начала проекта.
Не было никакого перехода. Был новый проект с использованием R Service. И окончательно в продуктив он попал уже на 2017-ом SQL Server через два года. Но это уже совсем другая история...

Сообщение было отредактировано: 15 дек 20, 18:08
15 дек 20, 18:07    [22248478]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
= I.=
Насчёт порядка обработки скриптов. Это действительно важная вещь. Внутри директории для файлов по умолчанию действует алфавитный порядок следования (для обработки на сервере). То, что надлежит поместить в начало трансляции — следует включить (имена файлов SQL) в файл $sql_order.list.

Например:
;SQL-TRANSLATION PRIMARY ORDER:
++ [Categories].sql
++ [Genres].sql
++ [Authors].sql
++ [Publishers].sql
++ [Series].sql


Те SQL-файлы, чьи имена начинаются с точки, обязаны присутствовать в $sql_order.list, например:
;SQL-TRANSLATION PRIMARY ORDER:
.ToRomanNumber.Ext.sql
.ToRomanNumber.sql


Существует разная мощность группы трансляции:
1) Отдельный SQL-скрипт (конкретный файл);
2) Простая подгруппа SQL (обычно это все SQL-файлы каталога);
3) Множество подкаталогов внутри текущего каталога (один уровень), плюс все файлы *.sql (так называемая большая группа).
В SQL-файл принято группировать файлы в виде подмножеств, размещая их в подкаталогах (уровня вложенности =1), давая подпапкам групп алфавитно упорядоченные имена (что достигается за счёт применения цифрового номера).

Например:
00 error_gen initials
01 drop_object
02 drop_objects


Или же:
Procedures_00
Procedures_01


Утилита $SQLTRANS обрабатывает (исполняет на сервере) композитный скрипт за один приём. Для осуществления же обработки в несколько стадий (трансляции) используются возможности последовательного вызова нескольких трансляций SQL — посредством сценария CMD.

= II.=
Помимо собственно скриптов с SQL, важнейшей составляющей являются импортные файлы свойств: $sql_settings.cmd, $….cmd, @….cmd, а также $sql_settings.sql (как альтернативный вариант). В файлах свойств принято держать общедоступные макроконстанты (выражаемые друг через друга определения: “set …=…”). Это в какой-то степени подобно тому, как работают заголовочные H-файлы языка C (только намного проще). Кстати, в файлах @….cmd принято временно включать поддержку UTF-8 (кодовая страница 65001), на этапе присваивания свойств. Все же SQL-скрипты — естественно в UTF-8.

= III.=
SQL-файл — это не только набор скриптов. Для подготовки комплексной трансляции работает подпрограмма SqlCatPP.exe, которая, помимо упорядоченной конкатенации SQL-файлов, производит, также, лёгкий предварительный (до SQLCMD) препроцессинг скриптов, с целью исправления номера строки, если применялась команда :SetVar (по-умолчанию такая строка выпадает из результатов SQLCMD, сбивая тем самым номер исходных строк на единицу). SqlCatPP же при встрече в файле :SetVar (pascal-style) добавит в скрипт закомментаренную строку (// :SetVar …), т. е. номер строки возможной ниже ошибки будет корректным.

$SQLTRANS реализована не монолитно, а в виде CMD+EXE. Привязка же к к SQLCMD сохранена по причине множества поддерживаемых ею SQLCMD-режимов и параметров, которые можно передать в неё, используя переменную $sqltrans.AdditionalParams.
Например, простейшая команда-сценарий generate_guid_list.cmd:
@echo off
setlocal

set $sqltrans.AdditionalParams=-y0
$SqlTrans "%~n0.sql" "guid_list.txt"
goto ERROR

:ERROR
echo ∙
pause
EXIT 255


-y0” (для SQLCMD) здесь использовано для исключения заголовков колонок из текста результатов (т. е. выводятся лишь сами данные).

Кроме того, $SQLTRANS (её командная часть) легко доступна для исправления в соответствии с эксклюзивными пользовательскими нуждами. Прочие же её составляющие подпрограммы-компоненты-зависимости (SqlCatPP.exe, ConfirmationPause.exe, TypeInColor.exe), а также другие утилиты SQL ($sqlupload.cmd, SqlToCsvExport.exe, $sql.cmd, $sqlcon.cmd) — тоже доступны для исправления. Имеются, также, исходники к простейшему FAR-плагину CmdCpAuto.dll, как и вспомогательные макросы FAR: Editor_CtrlAltEnter.lua, Editor_CtrlF12.lua, Editor_CtrlR.lua (см. каталог: “HandicraftSDK\CMD-utilities\Shell\Integration”, файлы *.lua, *.txt). Всё работает в комплексе, а также может быть скорректировано при желании.

= IV.=
Технология SQL-файл пригодна для 2-х основных целей:
1) Хозяйственная правка базы данных; выполнение действий/операций в режиме ручного управления (с правами администратора SQL-сервера); произведение теста операций (с откатом транзакции), и т. п.
2) Программирование активной части приложения БД на языке T-SQL (так называемые программатики), представляющей из себя набор процедур, функций и подобное. Для программирования в БД — возможно (опционально) задействование Усиленного Transact-SQL, в виде макроопределений и хелперов библиотеки SQLAUX (подключается к трансляции в главном файле настроек SQL-проекта $sql_settings.cmd).
15 дек 20, 22:53    [22248579]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35570
Блог
Хорошо, что кто-то делает что-то новое.
Плохо, что это новое никому не нужно, т.к. не превосходит старое )

Чем ваш проект лучше стандартной связки SSDT + TFS/GIT?
Зачем разработчику изучать ваше ПО, если есть стандартное?
15 дек 20, 23:09    [22248582]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
Критик
Чем ваш проект лучше стандартной связки SSDT + TFS/GIT?

"Чукча не читатель, чукча писатель?" (c)
1. Тем, что SSDT обеспечивает поддержку новых версий MS SQL Server с существенной задержкой (до года). Что иногда приводит к полной невозможности его использования (история с GRANT EXECUTE ANY EXTERNAL SCRIPT). А такой проект легко адаптируется к любой версии MS SQL Server.
2. SSDT очень неудобно использовать в гетерогенных средах. Например, проект для MS SQL + PostgreSQL.
3. SSDT совершенно не поддерживает никаких макроопределений, ограничиваясь только средствами SQLCMD. Сюда прикрутить любой препроцессор сложностей не составит. Например, попробуйте из SSDT публиковать проект в разные схемы одной и той же БД в зависимости от конфигурации проекта. Только без переноса всего проекта в PostDeployment, как предлагал выше msLex.

Вот если бы RedGate был бесплатен, я бы сам сказал, что подобный проект не нужен.

P.S. Заставил себя промолчать про TFS...
15 дек 20, 23:41    [22248597]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
L_argo
Member

Откуда:
Сообщений: 1510
ptr128
msLex, я в курсе, что можно использовать множество файлов.
А вот утверждая, что можно обойтись только массовой заменой CREATE, Вы глубоко заблуждаетесь. Потому что метаданные могут меняться. Причем могут не только добавляться поля таблицы, но так же меняться CONSTRAINT-ы, что для предлагаемого Вами подхода вообще печально.
После чего Вы становитесь вынужденными или руками прописывать все эти IF ... DROP/ALTER/CREATE, или все же взвоете и станете использовать подсистему сборки отличную от SSDT, в которой подобные процессы более-менее автоматизированы.
Что будет логичным, так как толку от SSDT, когда весь код деплоится через PostDeployment - НИКАКОГО. Берете в зубы Atom и радуетесь после убогого VS )))
+500
16 дек 20, 00:41    [22248615]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Владислав Колосов
Member

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

редактировать SQL файлы на корпоративном уровне? Это даже не знаю, сколько вызовет проблем, не говоря о средствах управления проектом и тестировании. Студия прекрасно справляется и с управлением, и с разработкой, и с версионированием и, главное, с публикацией проекта. Студия также позволяет выполнять развертывание CLR процедур, решение объединяет ВЕСЬ выпускаемый продукт - Reporting, Integration, клиентское приложение, утилиты, WEB проект и тому подобное. Интеграция позволяет легко контролировать код и версионировать ВЕСЬ выпускаемый продукт. Полностью контролировать поставку всех, подчеркну, разнородных компонентов продукта, а не выполнять узкий контроль только SQL файлов. Далее, инструменты публикации и сравнения, IntelliSense, отладка в одном рабочем месте, интеграция с TFS. На фоне этого процесс разработки в текстовом редакторе выглядит крайне бледно.
16 дек 20, 10:21    [22248709]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 888
Владислав Колосов, Вам сколько за рекламу MS платит?

"прекрасно справляется" - только подождать надо годик, пока он станет поддерживать уже выпущенную очередную версию MS SQL.

"решение объединяет ВЕСЬ выпускаемый продукт" - покажите мне, как в VS опубликовать гетерогенный проект, включающий в себя кроме MS SQL еще и PostgreSQL, кастомизированный Redmine (Ruby on Rails) вместе c MySQL и пачку утилит на Linux. А если к этому добавляется еще кросскомпиляция и прошивка удаленных микроконтроллеров, то с VS можно сразу вешаться.

"интеграция с TFS" - Вы попробовали вести проект серийного продукта в TFS, когда нужно поддерживать несколько версий продукта, да еще и с кастомизациями для разных клиентов? Да я скорее древним SVN буду пользоваться в таком случае, чем TFS.

"редактировать SQL файлы на корпоративном уровне" - расскажите, пожалуйста, как можно вести разработку SQL НЕ РЕДАКТИРУЯ SQL файлы?

К тому же речь идет о SQL проекте. Вы уж простите, но я даже не представляю, как можно писать код хранимых процедур в VS. В DBEaver - легко. В SSMS - вполне возможно. Но в VS? Увольте...

Публикация в VS вообще никакая. Попробуйте подставить в публикуемый SSRS отчет разные логотипы (embeded image) в зависимости от конфигурации публикации. Попробуйте публиковать SSDT SQL проект в разные схемы одной БД в зависимости от конфигурации.

Для публикации серьезного корпоративного продукта есть RedGate. Для сторонников OpenSource - liquibase. Допустим самописный toolchain. Но уж точно не SSDT.
16 дек 20, 11:07    [22248741]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Два занятных вопроса

= I.=
Подавляющее количество примеров с SQL, включая фирменную документацию, использует для инструкций стиль с заглавными буквами, подобно юридической секции DISCLAIMER. Сущностные же имена (как большие так и маленькие) при этом проглядывают не столь отчётливо, если сравнивать с классическими языками. (Попробуйте всё писать в стиле отказа от обязательств; даже не программу, а просто сколько-нибудь объёмный текст.) Мне думается, что подобная странная манера выработалась в связи с тем, что исторически SQL присутствовал в основном лишь в виде вкраплений в программы на других языках, а посему следовало выделять подобные фрагменты (используя верхний регистр). У SQL-кода вообще тяжеловато с пропиской; отношение к нему в этом смысле намного хуже, нежели к классическому языку программирования, где предусмотрены все средства хранения. Тут ещё и устройство самого SQL-сервера диктует свои правила, а там всё весьма консервативно; SQL-файлы с запросами просто так на сервер не выложишь (подобно JS/HTML), необходимо генерировать объекты.

= II.=
Что Вы думаете по поводу контроля за выполнением инструкций в языке T-SQL, касательно надёжности их исполнения в режиме по умолчанию, т. е. при отсутствии try-catch обёртки? В подобном старомодном режиме необходимо проверять почти каждую инструкцию на успешность её исполнения, анализируя переменную @@error. (Существуют, конечно, xact_abort и arithabort. Возможно, также, использовать ловлю исключения.) Данный режим (управление инструкциями) в качестве умолчания, на мой взгляд годится, разве что, где-нибудь в системном коде драйвера (в режиме ядра), но никак не в языке с высоким уровнем обращения к данным, в смысле обработки транзакций. Т.е., для выполнения, собственно, инструкций — также необходима достойная чёткость (в режиме по умолчанию).

В SQL-файл принято оборачивать весь скрипт (или тело Х.П.) в обрамляющие $(BEGIN_AUX) и $(END_AUX), на самом верхнем уровне. Препроцессор же SQLCMD раскрывает эти макрослова (при компиляции) в соответствующие последовательности, предназначенные для перехвата возможного исключения (с повторным выбрасыванием ошибки).

Пример того, как выглядит сохранённый в БД результат препроцессора, применительно к процедуре:
$(BEGIN_AUX) macro in DB (preprocessing result)

А вот — отвлечённый пример надёжного выполнения инструкций T-SQL (с автоматическим перехватом исключения), НЕ SQL-ФАЙЛ:
/*
ПРОВЕРКА ИЗМЕНЕНИЯ ТАБЛИЦЫ [FILES] —
УСТАНОВКА НЕСКОЛЬКИХ ПОЛЕЙ ОДНОВРЕМЕННО:
*/
:SetVar BEGIN "begin set xact_abort,implicit_transactions off; set ansi_nulls,ansi_null_dflt_on,arithabort,nocount on; begin try"
:SetVar END "end try begin catch if @@trancount>0 or xact_state()=-1 rollback transaction; throw; end catch; end"
$(BEGIN)
/*================================================================================================*/
BEGIN TRANSACTION
----------------------------------------------------------------------------------------------------

update [FILES]
set
[XNUMBER] = -1,
--[FILE_PATH] = '$(HomeDrive)$(HomePath)' -- только в настоящем SQLCMD
[FILE_PATH] = 'C:\Users\serg' -- для запуска в SSMS
where
[ID] in ( 1, 3, 5 )

-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
select * from [FILES_LOG] order by [DateTime], [ID], [_ID]
raiserror ('Искусственное исключение отката.',11,1)
----------------------------------------------------------------------------------------------------
COMMIT TRANSACTION
/*================================================================================================*/
$(END)
GO


Выполнение инструкций данного скрипта ниже raiserror не опустится. Т.е. сработает перехватчик, завёрнутый в виде ключевого макрослова $(END), см. :SetVar END …
(Транзакция не будет зафиксирована; напротив — будет выполнен её откат.)
16 дек 20, 13:12    [22248841]     Ответить | Цитировать Сообщить модератору
 Re: Технология SQL-файл (для MSSQL)  [new]
Сергей Китаев
Member

Откуда:
Сообщений: 22
Внимание!
Развёрнута новая дискуссия на тему SQL-файл.


Смотрите новую тему-продолжение (от 4 сентября 2021 г.):
Технология SQL-файл, препроцессор для T-SQL, бок-о-бок файлы и др.
https://www.sql.ru/forum/1338551/tehnologiya-sql-fayl-preprocessor-dlya-t-sql-bok-o-bok-fayly-i-dr

— — —
7 сен 21, 13:30    [22368804]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить