SQL Server 2012: Фрагменты кода на T-SQL

OSzone.net » СУБД » MS SQL » SQL Server 2012: Фрагменты кода на T-SQL
Автор: Салим Хакани
Иcточник: TechNetMagazine
Опубликована: 07.02.2013

Вспомните о сериях команд, которые приходится писать при создании триггеров, таблиц, хранимых процедур и даже инструкций Select. А теперь представьте, что все эти команды определены и готовы к использованию. Можно значительно сократить время и усилия по кодированию, если использовать новые фрагменты кода на T-SQL в SQL Server 2012.

Фрагменты кода позволяют быстро строить инструкции T-SQL без необходимости помнить команды и их синтаксис. Такую функциональность можно использовать для сокращения времени разработки и повышения производительности своих разработчиков и администраторов БД.

Фрагменты в SQL Server 2012 основаны на XML с предопределенными полями и значениями. При использовании фрагмента кода на T-SQL эти поля выделяются и можно переходить по полям, изменяя значения, как требуется.

Для простоты использования фрагменты кода разбиты на категории. Просматривать и выбирать разные фрагменты можно, ориентируясь на категории. В SQL Server 2012  представлены три вида фрагментов:

Создание пользовательских фрагментов

Узнаем, как можно создавать пользовательские фрагменты и добавлять их в меню фрагментов. Фрагменты создаются и используются в процессе, состоящем из трех шагов:

  1. Создание фрагмента с использованием XML.
  2. Регистрация фрагмента в консоли SQL Server Management Studio (SSMS).
  3. Вызов фрагмента при работе в редакторе запросов.

По умолчанию все фрагменты кода на T-SQL хранятся в следующей папке в виде файлов с расширением .snippet: C:\Program Files\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SQL\Snippets\1033.

Шаг первый. Создание файла фрагмента кода на T-SQL с использованием XML
Вот фрагменты, которые можно использовать для написания инструкции Select для любой таблицы (он также позволяет использовать инструкцию CASE для проверки равенства в столбце):

CASE_END.SNIPPET File
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Case-End</Title>
<Description> Insert Case...End Construct. </Description>
<Author> Saleem Hakani (Microsoft Corporation) </Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Code Language="SQL">
<![CDATA[
Select <Column_Name1>, <Column_Name2>, <Column_Name3>, <Column_Name4>=
  CASE <Column_Name4>
    WHEN '<value>' THEN '<Result>'
    WHEN '<value>' THEN '<Result>'
    WHEN '<value>' THEN '<Result>'
      WHEN '<value>' THEN '<Result>'
    ELSE 'Value not found'
  END,
<Column_Name5>, <Column_Name6>
From <Table_Name>
Go
]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

Шаг 2. Регистрация фрагмента в SSMS

Готовые файлы фрагментов регистрируются в SSMS с помощью диспетчера фрагментов кода (Code Snippets Manager). Можно создать новую папку на основе категории фрагментов или импортировать отдельные фрагменты в папку My Code Snippets.

Папка с фрагментами создается так:

  1. Откройте консоль SSMS.
  2. В меню Tools выберите Code Snippets Manager. Откроется окно диспетчера фрагментов.
  3. Щелкните кнопку Add.
  4. Перейдите к папке, содержащей файл CASE_END.Snippet, и щелкните кнопку Select Folder.

Далее надо импортировать фрагмент в консоль SSMS:

  1. Откройте консоль SSMS.
  2. В меню Tools выберите Code Snippets Manager.
  3. Щелкните кнопку Import в нижней части окна.
  4. Перейдите к папке, содержащей файл CASE_END.Snippet, выберите этот файл и щелкните кнопку Open.

Шаг 3. Вызов и вставка фрагмент T-SQL в окне редактора кода

Теперь у вас есть фрагмент по имени CASE_END, который можно вызывать в редакторе. Для этого надо нажать CTRL + K + X и выбрать категорию, в которой хранится нужный фрагмент. Вы также можете щелкнуть правой кнопкой в окне редактора кода и выбрать Insert Snippet.

Используя описанные шаги можно создавать фрагменты кода на T-SQL и регистрировать их в SSMS. Можно также создавать сложные фрагменты различных стандартных задач, значительно облегчив этим свою работу в SQL Server.

Решения на основе фрагментов

Представьте, что вы разработчик или администратор БД, отвечающий за безопасность своих серверов. На сервере SQL Server имеется 500 имен входа, но вы не знаете, какие роли назначены тем или другим именам входа. Если проверять имена входа по одному, это может занять часы или даже дни. Автоматизация быстрой проверки имен входа на уровне сервера позволило бы сократить время кодирования, а также повысило корректность кода, а также производительность работы разработчика и администратора БД.

Вот фрагмент кода, который позволяет быстро просматривать имена входа на уровне сервера вместе с их ролями и разрешениями. Следующий фрагмент SecuritySPY выводит список имен входа на уровне сервера вместе с назначенным им ролями:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>SQL_SecuritySPY - By Saleem Hakani (Microsoft Corporation)</Title>
<Description> Shortcut for checking SQL Server Server Role Permissions </Description>
<Author> Saleem Hakani (Microsoft Corporation) </Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Code Language="SQL">
<![CDATA[
--Author: Saleem Hakani (Microsoft Corporation)
--Website: Http://sqlcommunity.com
Select
                'Login Name'= Substring(upper(SUSER_SNAME(SID)),1,40),
                'Login Create Date'=Convert(Varchar(24),CreateDate),
                'System Admin' = Case SysAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Security Admin' = Case SecurityAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Server Admin' = Case ServerAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Setup Admin' = Case SetupAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Process Admin' = Case ProcessAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Disk Admin' = Case DiskAdmin
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End,
                'Database Creator' = Case DBCreator
                                                When 1 then 'YES (VERIFY)'
                                                When 0 then 'NO'
                End
                from Master.Sys.SysLogins order by 3 desc
Go
]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

Установив фрагмент SecuritySPY, вы сможете вызывать его в редакторе запросов, как описано выше в этой статье. Можно также щелкнуть правой кнопкой мыши в редакторе запросов и выбрать в контекстном меню Insert Snippet.

Создание и использование фрагментов позволяет упорядочить задачи по управлению SQL Server. Наличие заранее определенных команд избавляет от необходимости каждый раз делать одну и ту же работу.


Ссылка: http://www.oszone.net/19840/SQL-Server-2012