На этой неделе я вёл курс «Microsoft Certified Masters – Database» здесь, в Редмонде, и в первый день мы обсуждали структуру каталогов FILESTREAM. Мне задали вопрос: откуда берутся GUID имён каталогов? Поэтому я начал копаться в системных таблицах, пока Кимберли читала лекцию. Посмотрите мою предыдущую статью блога (Структура каталога FILESTREAM) за прошлую неделю, чтобы увидеть схему базы данных, с которой я работаю. Я воссоздал её снова и написал несколько запросов, чтобы найти, где хранятся GUID, поскольку они должны где-то храниться в базе данных.
Вот запрос для поиска всех имён каталогов FILESTREAM для обоих уровней каталога (и вы должны выполнить его через выделенное административное соединение (DAC), так как он обращается к недокументированным, скрытым системным таблицам):
SELECT
[o].[name] AS [Table],
[cp].[name] AS [Column],
[p].[partition_number] AS [Partition],
[r].[rsguid] AS [Rowset GUID],
[rs].[colguid] AS [Column GUID]
FROM sys.sysrowsets [r] CROSS APPLY sys.sysrscols [rs]
JOIN sys.partitions [p]
ON [rs].[rsid] = [p].[partition_id]
JOIN sys.objects [o]
ON [o].[object_id] = [p].[object_id]
JOIN sys.syscolpars [cp]
ON [cp].[colid] = [rs].[rscolid]
WHERE [rs].[colguid] IS NOT NULL
AND [o].[object_id] = [cp].[id]
AND [r].[rsguid] IS NOT NULL
AND [r].[rowsetid] = [rs].[rsid];
GO
Ниже показан снимок экрана для моего сценария.
Вы можете видеть, что я подключён через административное соединение в SSMS, и что имя каталога верхнего уровня является производным от GUID набора строк (rowset), а имя каталога уровня столбца является производным от GUID столбца. Обратите внимание, что некоторые части имеют обратный порядок байтов (byte-reversed), но это определённо те самые GUID.


Комментариев нет:
Отправить комментарий