by Alexey Knyazev
29. сентября 2015 00:00
Вопросы, которые периодически задают многие:
"Как узнать статус служб SQL сервер?"
"Как узнать под кем стартует сервис?"
"Как всё это сделать с помощью запроса T-SQL?"
Ответ на этот вопрос можно легко получить через стандартную оснаску Windows "Службы (Services)" - services.msc
[Ещё]
by Alexey Knyazev
2. декабря 2011 23:08
Ещё один вопрос, который регулярно появляется на тематических форумах:
"Как получить максимум из нескольких колонок одной таблицы?".
Любую задачу можно решить несколькими способами, эта не исключение. Я попытался собрать несколько вариантов для решения этого вопроса в этой заметке для разных версий SQL Server.
Кроме того, проведу небольшие замеры производительности всех рассмотренных примеров.
Буду рад, если вы предложите ещё несколько вариантов решения этой задачи и с удовольствием дополню эту статью позже.
[Ещё]
by Alexey Knyazev
21. сентября 2011 02:32
Агрегатные (
статические) функции выполняют вычисление на наборе значений и возвращают одиночное значение. Статистические функции, за исключением COUNT, не учитывают значения NULL. Статистические функции часто используются в выражении GROUP BY инструкции SELECT.
Все статистические функции являются детерминированными. Это означает, что статистические функции возвращают одну и ту же величину при каждом их вызове на одном и том же наборе входных значений. Дополнительные сведения о детерминизме функций см. в разделе
Детерминированные и недетерминированные функции. Предложение
OVER может следовать за всеми статистическими функциями, кроме CHECKSUM.
Статистические функции могут быть использованы в качестве выражений только в следующих случаях.
- Список выбора инструкции SELECT (вложенный или внешний запрос).
- Предложение COMPUTE или COMPUTE BY.
- Предложение HAVING.
Transact-SQL предоставляет следующие статистические функции:
К сожалению это весь список, но что делать, когда нам нужна агрегатная функция, которой нет в T-SQL? В этой статье я покажу, как создать свою агрегатную функцию на примере
побитового OR (Побитовое ИЛИ). Варианты решения будут в виде классического t-sql и в виде CLR-сборки. Кроме демонстрации скриптов, проведу небольшие замеры и сравнения производительности вариантов на t-sql и clr.
[Ещё]
by Alexey Knyazev
20. февраля 2011 21:49
Рано или поздно, но у многих возникает вопрос, как определить список дисков, их общий объём и объём свободного пространства на них, при этом используя t-sql. На первый взгляд кажется, что задача должна решаться на раз, два, три. Но не все так просто.
Для решения этой задачи можно использовать несколько сценариев. Во первых хотелось бы вспомнить о недокументированной хранимой процедуре xp_fixedrives. Это очень полезная расширенная хранимая процедура, которая возвращает список всех установленных жестких дисков и размер в МБ свободного пространства для каждого жесткого диска.
[Ещё]
by Alexey Knyazev
18. февраля 2011 00:48
Пользовательские сообщения, как и системные, хранятся в системном представлении sys.messages (master..sysmessages для более ранних версий). Сообщения с идентификаторами, меньшими 50000, являются системными.
Для переноса пользовательских сообщения, написал скрипт, который динамически генерит скрипт для создания этих самых сообщений. Код работает, как для SQL Server 2000, так и выше:
... [Ещё]
by Alexey Knyazev
26. января 2011 23:55
Восстановления базы из Backup`a или перенос её на другой сервер, "сбраcывает" значение "даты создания" этой базы данных (в таблицах sys.databases, msdb..backupset и т.д.).
Встаёт вопрос: как найти оригинальную дату создания!?
Гарантированный способ - это чтение данных из boot-страниц, а именно страница №9, с помощью команды DBCC PAGE.
[Ещё]
by Alexey Knyazev
26. января 2011 00:42
Существует очень раcпространенный миф, что конструкция insert into ... select ... from ... order by ... гарантирует последовательность вставки данных в таблицу согласно условию order by. Но это заблуждение, т.к. мы не можем гарантировать последовательность физической вставки данных. Сиквел сам (по своему, неведанному нам сценарию) определяет, как данные попадут в таблицу, последовательно или параллельно и какими кусками определяет оптимизатор. При этом кляуза (clause) просто игнорируется.
Но существует очень интересная особенность, когда в таблице, в которую осуществляется вставка, есть поле IDENTITY
[Ещё]
by Alexey Knyazev
25. ноября 2010 16:10
В качестве ещё одного небольшого приложения на PowerShell я написал небольшой скрипт, который позволит работать с вашими базами данных. Это небольшое самостоятельное Windows-приложение с визуальными формами, которое позволяет писать запросы, а результат запроса можно не долько просматривать в виде удобного GridView, но и применять различные фильтры
[Ещё]
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 Флаг - удалять или нет распакованную копию БД после востановления
[Ещё]
by Alexey Knyazev
1. октября 2010 01:44
Сжатие резервных копий было впервые представлено в выпуске 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 [Ещё]