Чудесный оператор CROSS APPLY

by Alexey Knyazev 22. декабря 2010 01:03

Сегодня я хочу рассказать более подробно об операторе APPLY, а конкретнее о его типе CROSS APPLY. Этот оператор появился впервые в SQL Server 2005, но к сожалению многие так и не научились им пользоваться, возможно это из-за того, что в BOL (SQL Server Books Online) этот оператор плохо описан и имеет очень "сухие" примеры его использования. В этой статье я покажу несколько интересных демонстраций, где этот оператор может пригодиться.

Основная фича оператора заключается в том, что APPLY позволяет вызывать табличную функцию для каждой строки, возвращаемой внешним табличным выражением запроса. Именно этот пример есть в BOL.
Оператор CROSS APPLY возвращает только строки из внешней таблицы, которые создает результирующий набор из возвращающего табличное значение функции. Оператор OUTER APPLY возвращает и строки, которые формируют результирующий набор, и строки, которые этого не делают, со значениями NULL в столбцах, созданных возвращающей табличное значение функцией.

[Ещё]

Tags: , , ,

SQL Server

SQL Server 2008 R2 System Views Map

by Alexey Knyazev 10. декабря 2010 21:47

В свет вышла схема всех связей системных объектов SQL Server 2008R2:

Прямая ссылка на www.microsoft.com/downloads

Для SQL Server 2008, 2005 и 2000 System Views Map можно найти в одном из моих прошлых постов: http://t-sql.ru/post/SystemViewsMap.aspx

[Ещё]

Tags: ,

SQL Server

SQL Console на PowerShell

by Alexey Knyazev 25. ноября 2010 16:10

В качестве ещё одного небольшого приложения на PowerShell я написал небольшой скрипт, который позволит работать с вашими базами данных. Это небольшое самостоятельное Windows-приложение с визуальными формами, которое позволяет писать запросы, а результат запроса можно не долько просматривать в виде удобного GridView, но и применять различные фильтры



[Ещё]

Tags: , , ,

PowerShell | SQL Server

Job Viewer

by Alexey Knyazev 19. октября 2010 00:07



Прошло почти два года, как я выкладывал небольшую самописную утилиту на ITCommunity.RU, позволяющую мониторить выполнение Job`ов сразу на нескольких серверах БД. Я и подумать не мог, что она окажется такой полезной. За это время я получил несколько писем с просьбой обновить её и добавить поддержку SQL Server 2000. И вот наконец-то руки дошли до этой утилиты.



Эта версия поддерживает SQL Server 7.0/2000/2005/2008/2008R2. Если найдете какие-то ошибки, или у вас возникнут пожелания, связанные с доработкой этой программки, то пишите, постараюсь дополнить её полезным функционалом.
[Ещё]

Tags: , , , , ,

SQL Server

xp_logevent2

by Alexey Knyazev 5. октября 2010 23:34


В SQL Server есть интересная расширенная хранимая процедура xp_logevent. Процедура заносит определенное пользователем сообщение в файл журнала SQL Server и в средство просмотра событий Windows Event Viewer. Появилась идея немного расширить возможности этой процедуры, для этого я написал небольшую CLR-сборку, с помощью которой можно работать с журналом ошибок Windows.


Задача новой процедуры, не только заносить событие в журнал, но и просматривать события на сервере. Плюс к этому очень полезным будет возможность очищать журнал.


Записи будут заноситься в отдельный журнал SQLServerLog. Сообщения могут быть одним из 5 типов:



  • Error

  • FailureAudit

  • Information

  • SuccessAudit

  • Warning


Код сборки:

[Ещё]

Tags: ,

SQL Server

Востановление БД из сжатой копии в SQL Server 2000

by Alexey Knyazev 3. октября 2010 15:48

В прошлый раз я писал, как можно организовать автоматическое сжатие резервной копии БД в SQL Server 2000 с помощью бесплатного архиватора 7-Zip, сейчас я покажу процедуру dbo.RestoreArchiveBackup, которая востанавливает из сжатой копии вашу базу данных.


В процедуре 5 параметров:



  • @RestoreCommand - Стандартная команда востановления БД на T-SQL, либо команда Help, которая выводит список параметров архиватора 7-zip

  • @BackupFile Полный путь и имя файла резервной копии, туда мы будем извлекать бэкап из архива

  • @ArchCommand Параметры архиватора, с которыми мы запускаем нашу процедуру

  • @ArchFile Имя файла резервной копии БД в сжатом виде (как сжимать описано в предыдушем посте)

  • @DeleteAfterRestore Флаг - удалять или нет распакованную копию БД после востановления

[Ещё]

Tags: , ,

SQL Server

Компрессия Бэкапа в SQL Server 2000

by Alexey Knyazev 1. октября 2010 01:44

Backup  CompressionСжатие резервных копий было впервые представлено в выпуске SQL Server 2008 Enterprise. Начиная с версии SQL Server 2008 R2, сжатие резервных копий поддерживается в выпуске SQL Server 2008 R2 Standard Edition и всех выпусках с более широкими возможностями. Сжатую резервную копию можно восстановить в любом выпуске SQL Server 2008 и более поздней версии. ( http://technet.microsoft.com/ru-ru/library/bb964719.aspx )

Для сжатия резервных копий в более ранних версиях использовались утилиты 3-их фирм (как правило платные). Но можно найти и бесплатные аналоги, например небольшая утилита от старого участника сообщества Russian SQL Server Club locky ( http://mcp.itcommunity.ru/blogs/rsug/archive/2010/06/28/110674.aspx ).



Можно сказать на коленке накидал небольшую процедуру на T-SQL, которая с помощью хранимой процедуры xp_cmdshell и бесплатного архиватора 7-zip сжимает резервную копию.



Собственно сама процедура dbo.BackupWithArchive

[Ещё]

Tags: , ,

SQL Server

Распарсинг строки с разделителем

by Alexey Knyazev 8. августа 2010 02:03

Как-то я уже писал, как можно разбить строки таблицы на состовляющие ("Разбиваем строки нa слoва"). Но из 4 примеров только 1ый подходил для SQL Server 2000 и ниже. А у меня появилась задача распарсить строки с разделителем в виде запятой и полученные значения занести в отдельную таблицу, как раз в 2000ой версии.


Основная сложность этой задачи в том, что объем таблицы несколько миллионов строк и лочить таблицу на долго нельзя. После нескольких эксперементов получился скрипт, который отработал на достаточно большом объеме за несколько десятков секунд. Вариант не претендует на звание самого изящного, но все-таки размещу его тут.

[Ещё]

Tags: , ,

SQL Server

Ошибка: Программе установки SQL Server не удалось получить сведения о системной учетной записи ASPNET

by Alexey Knyazev 1. августа 2010 00:21


При установке SQL Server Express возникает ошибка:

Программе установки SQL Server не удалось получить сведения о системной учетной записи для учетной записи ASPNET. Чтобы продолжить, переустановите платформу .NET Framework, а затем снова запустите программу установки SQL Server.



Английский вариант:
SQL Server Setup failed to obtain system account information for the ASPNET account. To proceed, reinstall the .NET Framework, and then run SQL Server Setup again.



Лекарство:

Запускаем CMD:



cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regiis -i


После создания ASPNET-учётной записи, можно повторно запускать установку SQL Server.

[Ещё]

Tags: ,

SQL Server

Удобная процедура трассировки событий на стороне сервера

by Alexey Knyazev 23. июля 2010 23:21

SQLTrace Для всех, кто работает с SQL Profiler для отслеживания событий на сервере, хорошо известно, как создавать трассировки. Это не представляет никакой сложности. И действительно, SQL Server Profiler обладает богатым интерфейсом, предназначенным для создания и управления трассировкой, позволяющим анализировать и воспроизводить результаты трассировки.


Но всегда ли есть возможность воспользоваться SQL Profiler`ом!? А самое главное работа Profiler приводит к значительным накладным расходам. Основные затраты идут на создание наборов строк для отправки их клиенту Profiler. В этом плане трассировка с помощью команд T-SQL позволяет минимизировать воздействие на производительность, т.к. она выполняется на стороне сервера и избегает перегрузки.


Кромя того, большинство экспертов по MS SQL Server, в том числе и сотрудники Microsoft рекомендуют отдать предпочтение трассировке на стороне сервера. Это подтверждают и тесты, особый интерес у меня (думаю и у вас) вызвала статья Performance Impact: Profiler Tracing vs. Server Side SQL Tracing.


Разница в замерах чуть ниже, а сейчас скажу о чём собственно это статья и что же это за удобная процедура трассировки: как извесно трассирывание на T-SQL очень трудоёмкая задача и не слишком понятная для начинающих администраторов/разработчиков, поэтому у меня и возникла идея написать что-то более понятное и удобное для повседневного использования.

[Ещё]

Tags: , , ,

SQL Server