Привет, Хабр!
В данной публикации речь пойдет о группировке объектов в обозревателе SQL Server Management Studio.
image
Если Вы работаете с SSMS, прошу по кат!

Сразу хочу сказать что решения в коробке Microsoft SQL Server нет. Для получения данной функциональности нужно установить addin для SSMS.

Итак, зачем нам может понадобится группировать объекты SQL сервера?
Из моей практики причины таковы:
  • Скрыть ненужные объекты. Количество баз данных на наших серверах около сотни. Каждый раз, когда я раскрываю папку с базами данных, я вижу не нужный мне «хлам». Хотелось бы запихнуть не интересующие меня базы в отдельную папку, чтобы не мозолили глаза, и оставить только базы с которыми я работаю.
  • Логическая группировка объектов. Иногда, когда я работаю с одним и тем же набором таблиц, мне хотелось бы их видеть все в одном месте. Таблицы находятся с разных схемах и префиксы у них разные. Так что приходится скролить (или фильтровать) ObjectExplorer чтобы найти нужную мне. Это очень неудобно.
  • Группировка по схемам. Имея в базе 1000+ таблиц или процедур, я не хочу их сразу все видеть когда раскрываю соответствующую папку. При этом тратится не малое время на отображение. Помнится, как-то раз в одной базе данных было ~5000 процедур и при раскрытии узла StoredProcedures студия сообщила мне «Я не щмагла, воспользуйтесь окном Object Explorer Details»


Заставить студию группировать объекты можно при помощи плагина. После установки плагина в контекстных меню папок Databases, Tables, Views, Procedures, Functions появляются дополнительные функции позволяющие группировать объекты.

Если необходимо чтобы сгруппированные объекты могли видеть и другие члены Вашей команды, то необходимо указать в настройках плагина использование общей сетевой папки (можно также указать папку DropBox или Google Drive, если Вы находитесь не в одной сети). Поскольку плагин сохраняет настройки группировки в виде XML файлов для каждого сервера, то можно с легкостью кому-то дать права на запись или только на чтение определенных файлов.

Спасибо за внимание!

Комментарии (3)


  1. t13s
    22.01.2016 12:37
    +2

    С учетом того, что вы пиарите явно коммерческий продукт, то вам, как минимум, об этом нужно честно рассказать.
    И получается, что вы блог слегка попутали.
    В целом — фу таким быть.


  1. AlanDenton
    22.01.2016 12:58
    +1

    Как Вы создаете эти папки в Database Explorer? После добавления группировки с помощью папок, при попытке навигации в коде на объект у меня перестали работать все мои плагины SQL Complete и SQL Search:



    Лично для меня это критично.

    Возможно стоит добавить Drag&Drop в этот диалог, а то не сильно удобно с ним работать:



    При поиске значения по таблицам 1`2 на AdventureWorks2012 получил ER:

    ========================= 
     Error Information 
    ========================= 
    Message = Argument data type hierarchyid is invalid for argument 1 of like function.
    
    InnerException = 
    
    Type = System.Data.SqlClient.SqlException
    Module = System.Data.dll
    
    TargetSite = Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])
    StackTrace:
       at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
       at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
       at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
       at System.Data.SqlClient.SqlDataReader.get_MetaData()
       at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
       at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
       at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
       at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
       at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
       at System.Data.SqlClient.SqlCommand.ExecuteReader()
       at SQLRefactorStudio.UserControls.FindDataControl.Search()
    


    1. AlanDenton
      22.01.2016 13:05

      Только что посмотрел на подпись издателя: Evgeny Vorobyev. Насколько я понимаю, что Вы автор данного плагина? :)
      Желаю удачи Вам в развитии продукта.