Поиск зависимостей между базами данных SQL Server при помощи регулярных выражений

добавлено: 10 сен 14
понравилось:0
просмотров: 2292
комментов: 0

теги:

Автор: SQL Refactor Studio Team

Добрый день!
Сегодня хочу поделится с Вами процедурой поиска зависимостей между базами данных.


Не так давно я столкнулся с такой задачей:
на одном SQL Server есть две базы данных Northwind и AdventureWorks2008R2 (для простоты).

Картинка с другого сайта.

Объекты базы AdventureWorks2008R2 используют объекты базы Northwind.
Нужно перенести используемые объекты из базы Northwind в базу AdventureWorks2008R2.

Как получить список используемых объектов?
На самом деле очень просто... При помощи SQL Refactor Studio, умения писать регулярные выражения и работать с XML в SQL Server.

Щелкаем по базе AdventureWorks2008R2 ПКМ и выбираем пункт меню "SQL Refactor Studio->Find code"

Картинка с другого сайта.

Ставим галку "Use regular expressions" и пишем в поле "Find what" вот такую кракозябру

[\["]?Northwind[]"]?[\["]?[\.][]"]?.+?[\.][\["]?\w{2,}[]"]?


Нажимаем Enter или кнопку "Start" на тулбаре.

Картинка с другого сайта.

Теперь экспортируем результат поиска. На тулбаре есть кнопка Export. Нажав ее мы увидим дерево в XML виде.

Картинка с другого сайта.

Копируем полученный XML, открываем в SSMS новое окно и выполняем вот такой запрос

DECLARE @xml xml = '
<DatabaseSearchResult  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Server Name="NOTE\SQL2012">
	<Database Name="AdventureWorks2008R2">
		<Object Name="test.NorthwindUsageProc" Type="StoredProcedure" SearchDuration = "34.0038 ms">
			<Match Value="Northwind.dbo.Categories" Offset="62" />
			<Match Value="Northwind.dbo.Customers" Offset="102" />
			<Match Value="Northwind.dbo.Products" Offset="194" />
			<Match Value="Northwind.dbo.Employees" Offset="574" />
		</Object>
		<Object Name="test.SomeNorthwindView" Type="View" SearchDuration = "129.9477 ms">
			<Match Value="Northwind.dbo.[Customers]" Offset="53" />
		</Object>
	</Database>
</Server>
</DatabaseSearchResult>
'

SELECT DISTINCT  
	REPLACE(REPLACE(N.value('@Value', 'nvarchar(200)'), '[', ''), ']', '') AS ObjectName
FROM @xml.nodes('/DatabaseSearchResult[1]/Server/Database/Object/Match') AS T(N)


Вот и все, мы получили список уникальных объектов базы Northwind, которые используются в базе AdventureWorks2008R2.

Картинка с другого сайта.

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии