Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Пн Фев 15, 2016 11:36 Заголовок сообщения: Версионность SP процедур |
|
|
Мне очень не хватает версионности SQL объектов, аналогично объектам дизайнера. Внедрение такого решения для SQL сервера дорого и сложно, если я не ошибаюсь.
Предлагаю добавить в дизайнер список SP процедур. Во время сохранения или изменения код, написанный в процедуре, должен выполняться, аналогично Z-процедурам. Если ошибок нет, то новая версия кода внедряется на SQL сервере, а старая сохраняется в архиве дизайнера. |
|
Вернуться к началу |
|
 |
Antoshes
Зарегистрирован: 17.02.2014 Сообщения: 171 Откуда: Томск
|
Добавлено: Пн Фев 15, 2016 11:46 Заголовок сообщения: |
|
|
rebel25
Объекты SQL сервера никак не связаны с объектами БОСС Дизайнера.
Если вы хотите отследить версионность изменений объектов SQL используйте SQL средства. |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Пн Фев 15, 2016 11:59 Заголовок сообщения: |
|
|
SQL объекты не связаны с дизайнером, но могут развертываться через дизанер и хранить там свои версии. Связь между дизайнером и сиквелом можно сделать по именам объектов. |
|
Вернуться к началу |
|
 |
RVV Большой шоколадный орден

Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Пн Фев 15, 2016 12:33 Заголовок сообщения: |
|
|
Сохраняйте копии БД до обновления |
|
Вернуться к началу |
|
 |
Antoshes
Зарегистрирован: 17.02.2014 Сообщения: 171 Откуда: Томск
|
Добавлено: Пн Фев 15, 2016 12:38 Заголовок сообщения: |
|
|
rebel25
не думаю что БОССовцы захотят делать этот функционал. Он просто не нужен.
Если вам все таки хочется, то можете загружать в таблицу все SQL объекты, которые изменяются/добавляются обновлением и потом анализировать, вести версионность. Сделать это не сложно. |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Пн Фев 15, 2016 14:50 Заголовок сообщения: |
|
|
Речь не только об обновлениях, даже хочу сказать что обновления не сильно интересны. Дело касается своих разработанных сиквельных процедур и функций.
Проблема в том что Х, Z языки, RP Server это не модные вещи - под них трудно найти людей, зато TSQL знают значительно большее число сотрудников. Даже те кто знают, стараются использовать сиквельные технологии т к это модно и пригодится при смене работы.
Я считаю что не нужно ограничивать разработчика - пиши только на х языке!, они люди творческие, если их ограничивать разбегутся.
В результате имеем много своих разработок из сиквельных объектов - отчеты, расчеты (не зарплаты а например премий). Объекты постоянно дорабатываются, а версий нет - из-за этого масса проблем. |
|
Вернуться к началу |
|
 |
Antoshes
Зарегистрирован: 17.02.2014 Сообщения: 171 Откуда: Томск
|
|
Вернуться к началу |
|
 |
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Ср Фев 17, 2016 11:37 Заголовок сообщения: |
|
|
Идея может быть и интересная. В принципе, ничто не мешает сделать произвольный отчет, в котором слева сделать дерево (грузим туда нужный нам список процедур SQL), добавляем таблицу (одна из колонок хранит bin-ик), в которой храним версии процедур. А справа собственно отображаем запись, при клике открывается диалог, в одно из полей грузим текст процедуры, только редактор SQL синтаксис не подсветит, что не есть гуд
Правда вот редактор текстовый что в дизайнере, что в других объектах мне вот лично неудобен:
1. Нет подсветки парных скобок в виде "(" "{" "["
2. Нет подсветки выделенных переменных
3. И наконец самое запредельное, нет подсветки ошибок синтаксиса, правда тут еще большой вопрос вообще к редактору из дизайнера! Ну вот, к примеру, почему в дизайнере "case when ... then ... else ... end ..." не работает, а так "(case when ... then ... else ... end) ..." работает (т.е. скобки появились)
Вот и получается, что мне приходится что X язык что SQL процедуру перетаскивать текст в Notepad++ и там редактировать код (там есть подсветки скобок и переменных), а уж потом обратно перетаскивать в дизайнер или в SQL Managment Studio для работы. |
|
Вернуться к началу |
|
 |
Antoshes
Зарегистрирован: 17.02.2014 Сообщения: 171 Откуда: Томск
|
Добавлено: Ср Фев 17, 2016 11:44 Заголовок сообщения: |
|
|
Ну что, тогда все дружно просим БОСС сделать intellisense и подсветку для Дизайнера
rebel25
вчера еще одна статья на хабре про версионирование SQL объектов появилась
https://habrahabr.ru/post/277359/ |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Ср Фев 17, 2016 19:32 Заголовок сообщения: |
|
|
Цитата: | Идея может быть и интересная. В принципе... |
Я имел в виду только деплоить сиквельные процедуры через дизайнер, чтобы хранить версии, а разработаны они могут быть где угодно до этого - как правило на среде DEV.
Сейчас пишу триггер для таблицы с доп. сегментами. Идея такая, если в тексте есть cлова create или alter procedure то во время сохранения доп. сегмента выполнить его код.
Всё вроде работает, только столкнулся с проблемой кавычек - если в тексте хранимой процедуры есть кавычки то получаю ошибку.
Передаю текст в переменную и выполняю так
EXEC(@SS)
если в тексте нет кавычек то всё работает отлично. Не подскажите как выполнить текст из поля таблицы с кавычками? |
|
Вернуться к началу |
|
 |
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Пт Фев 19, 2016 09:30 Заголовок сообщения: |
|
|
Если так сказать "в лоб", то просто до момента exec делайте replace(sql_text,'','''').
Т.е. перестраховываемся и все попадающиеся кавычки просто дублируем как это и делается всегда в динамическом SQL. |
|
Вернуться к началу |
|
 |
rebel25 Большой шоколадный орден

Зарегистрирован: 06.10.2008 Сообщения: 580 Откуда: Москва
|
Добавлено: Чт Апр 28, 2016 09:52 Заголовок сообщения: |
|
|
У меня так и не получилось использовать для внесения изменений в серверные процедуры дизайнер. Повесив триггер на соответствующую таблицу, который запускает код X процедур при сохранении, если в них встречаются символы, характерные для хранимых процедур, получал ошибку каждый раз, если в тексте процедуры были кавычки. Ничего из здесь описанного не помогло.
Можно попытаться вешать триггер на системные таблицы, но это запрещено. Создал вью к системным таблицам и триггер для нее, но от почему то не срабатывал.
Можно использовать для протоколирования профайлер или дмл триггеры, но я это не пытался делать, т к наверное это долго и не удобно.
В итоге сделал такое решение - создал джоб, который раз в сутки добавляет в протокол изменившиеся серверные объекты. Нельзя понять кто внес изменение, нельзя отследить изменения в течении дня, а в остальном меня всё устраивает.
Таким образом я получил архив серверного кода, которого мне очень не хватало - по аналогии с архивом дизайнерского кода.
Ниже текст скрипта заполнения архива:
CREATE TABLE [dbo].[user_arch](
[id] [int] IDENTITY(1,1) NOT NULL,
[object_id] int null,
[name] [varchar](500) NULL,
[type] [varchar](50) NULL,
[text] [varchar](max) NULL,
[mdate] [datetime] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
--изменившиеся объекты
insert into user_arch (object_id,name,type,text,mdate)
select o.object_id,o.name,o.type,c.definition,o.modify_date
from sys.sql_modules c join sys.objects o on (c.object_id=o.object_id)
join (select ROW_NUMBER() OVER(PARTITION BY object_id ORDER BY mdate DESC) as row, object_id, text, mdate from user_arch) t
on (t.object_id=o.object_id and t.text!=c.definition and row=1)
--добавленные объекты
insert into user_arch (object_id,name,type,text,mdate)
select o.object_id, o.name,o.type,c.definition,o.modify_date
from sys.sql_modules c join sys.objects o on (c.object_id=o.object_id)
where not exists (select * from user_arch where object_id=o.object_id) |
|
Вернуться к началу |
|
 |
GIN
Зарегистрирован: 04.03.2010 Сообщения: 114
|
Добавлено: Пн Июн 27, 2016 20:41 Заголовок сообщения: |
|
|
согласен, отследить проблема, так же никак не получается получить историю кто именно менял, на каждый объект не повесишь "шпиона". Меня тоже интересует данная проблема. Может есть у кого другое решение?
когда то тоже рыл в этом направлении - вот что только нашел по этой тематике у себя в переписке:
можно кстати попробовать посмотреть историю изменения в дефолтном файле...
select LoginName, StartTime, DatabaseName, ObjectName
from fn_trace_gettable
('C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL_2008\MSSQL\Log\log.trc', default)
where EventClass = 164 -- Object:Altered
and ObjectType = 8272 -- Stored Procedure
но помню, что это не помогло мне. _________________ Что бы увидеть свет в конце туннеля, нужно все время копать... |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|