| 
			
				|   Независимый форум, посвященный системе БОСС-Кадровик
 и всему, что с ней связано
 
 |  |  
 
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| 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
 Сообщения: 452
 
 
 | 
			
				|  Добавлено: Пн Фев 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
 
 но помню, что это не помогло мне.
 _________________
 Что бы увидеть свет в конце туннеля, нужно все время копать...
 |  |  
		| Вернуться к началу |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |