Header RSS-подписка на обновления сайта eMail-подписка на обновления сайта

Кодохранилище a.k.a. snippets

На этой странице расположилась постоянно пополняемая библиотека исходных кодов на языке T-SQL (так же известных как «сниппеты», потому что каждый из них мал по объему и решает одну конкретную проблему). Каждый сниппет в обязательном порядке снабжен объемным комментарием объясняющим его назначение и дающий примеры входных/выходных значений. Сниппеты объединены в группы по функциональному назначению, см. блок «Быстрая навигация» чуть ниже. Все представленные здесь коды являются абсолютно free и вы можете использовать их в личных и производственных задачах совершенно свободно. Если же вы хотите сослаться на тот или иной сниппет в своем форуме, блоге, ином публичном ресурсе — пожалуйста, используйте постоянную ссылку на заинтересовавший вас сниппет (она известна как Permalink). Permalink показывается и может быть скопирован из заголовка окна просмотра полного текста каждого сниппета.
Следует заметить, что код сниппетов по умолчанию оптимизируется (и в обязательном порядке тестируется) под последнюю релиз-версию MS SQL Server. Работоспособность кода на предыдущих версиях сервера более чем вероятна, но не гарантируется — проверяйте!
Высказать замечание, предложить улучшение или даже замену тому или иному сниппету можно через страницу Контакт.
Итак, как говорится: «кодируйте с нами — кодируйте лучше нас». :)

Быстрая навигация
Работа с датами и временем Работа со строками Мониторинг/аудит Алгоритмы и вероятности
Группировка/расщепление данных Изменение данных Отладка/тестирование Управление сервером
Транзакции и сессии      


Сегодня и завтра российских дата-центров. Выбираем дата-центр для аренды серверной стойки. 366bef3a

Работа с датами и временем

  • Узнать первый и последний день месяца заданной даты

    У нас имеется определенная дата. Сформировать две строки:
    -строку представляющую первый день того же месяца
    -строку представляющую последний день того же месяца
    ▲ к быстрой навигации
  • Узнать для данного дня следующий РАБОЧИЙ

    Для данной даты вычислить ближайший рабочий день, при этом:
    -Пнд.-Пт. - рабочие дни, КРОМЕ отмеченных в спецтаблице
    -Суб.,Вск. - выходные, КРОМЕ отмеченных в спецтаблице
    ▲ к быстрой навигации
  • Узнать сколько РАБОЧИХ дней между двумя датами

    Для двух дат вычислить разницу БЕЗ учета выходных и
    праздников и при этом:
    -Пнд.-Пт. - рабочие дни, КРОМЕ отмеченных в спецтаблице
    -Суб.,Вск. - выходные, КРОМЕ отмеченных в спецтаблице
    ▲ к быстрой навигации
  • Определить является ли указанная дата РАБОЧИМ днем

    Требуется узнать, приходится ли указанная дата на
    выходные или праздники, при этом:
    -Пнд.-Пт. - рабочие дни, КРОМЕ отмеченных в спецтаблице
    -Суб.,Вск. - выходные, КРОМЕ отмеченных в спецтаблице
    ▲ к быстрой навигации
  • Из двух символьных колонок составить дату типа datetime

    Таблица T состоит из колонок A и B любого символьного типа.
    Мы знаем что A содержит дату, а B - время, причем дата
    всегда указана полностью (8 символов), а время м.б. указано
    частично (1-4 символа). Сформировать из каждой пары datetime.
    ▲ к быстрой навигации

Работа со строками

  • Сделать первый(и только первый) символ каждого слова в строке прописным

    Есть строка состоящая из слов разделенными ПРОБЕЛАМИ(!)
    Регистр каждой буквы каждого слова произвольный.
    Требуется сделать только первую букву каждого слова
    заглавной, а остальные - строчными.
    ▲ к быстрой навигации
  • Очистить строку от лишних пробелов

    Лишними пробелами считаются:
    -все пробелы до первого значащего символа
    -все пробелы после последнего значащего символа
    -все внутренние пробелы если их 2 и более подряд
    ▲ к быстрой навигации
  • Найти число вхождений внутренней строки во внешнюю

    Есть две строки: "внутренняя" (шаблон) и "внешняя" (база).
    Найти сколько раз шаблон повторяется в базе.
    ▲ к быстрой навигации
  • Распарсить строку символов

    Имеется строка состоящая из "порций"(chunk). Порции разделены
    определенным символом. Требуется извлечь каждую порцию и
    поместить ее в ячейку таблицы. Если порция имеет лидирующие/
    завершающие (но НЕ внутренние!) пробелы - отбросить их.
    ▲ к быстрой навигации

Мониторинг/аудит

  • Оценить время выполнения пакета команд

    Есть пакет команд (batch), требуется оценить время
    его исполнения сервером с точностью до миллисекунд.
    ▲ к быстрой навигации
  • Оценить нагрузку на Disk I/O от каждого файла каждой БД

    Требуется узнать, на какую базу данных (и на какой из
    ее файлов) тратится наибольшее количество операций
    чтения/записи с/на дисковую подсистему.
    ▲ к быстрой навигации
  • Найти самые ресурсозатратные запросы к серверу

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

    Для всех таблиц заданной базы вывести число строк(rows) и
    зарезервированное под каждую таблицу место на диске.
    Последний размер дополнительно разбить на: место под данные,
    место под индексы и пока не используемое место.
    ▲ к быстрой навигации
  • Произвести поиск данных во ВСЕХ таблицах данной базы

    Требуется найти информацию во всех колонках заданного типа,
    не важно к какой таблице она относится. Так же необходимо
    подсчитать сколько раз искомая информация встретилась в
    той или иной колонке.
    ▲ к быстрой навигации
  • Установить время внесения последних изменений в таблицу

    Требуется узнать время внесения последних изменений в данные
    таблицы (изменения в структуре не считаются, равно как и
    запросы оператором SELECT).
    ▲ к быстрой навигации

Алгоритмы и вероятности

  • Сгенерировать случайную строку (пароль, ключ) заданной длинны

    Мы знаем необходимую длину пароля,минимальный(по ASCII-кодам)
    символ который может в него войти, максимальный символ и
    символы которые в него входить не могут. Нужно сгенерировать
    случайный пароль.
    ▲ к быстрой навигации

Группировка/расщепление данных

  • Данные одной и той же колонки вывести в разных колонках резалт-сета

    Данные содержатся в колонке A таблицы T. Базируясь на
    значениях колонки B той же таблицы вывести их в
    резалт-сете в колонках A1 и A2.
    ▲ к быстрой навигации
  • Возвращают ли два резалт-сета идентичные данные?

    Запросы SELECT1 и SELECT2 различны (по коду) и возвращают два
    резалт-сета. Мы подозреваем, что данные в обоих идентичны.
    Требуется подтвердить/опровергнуть наше подозрение.
    ▲ к быстрой навигации
  • Вывести значения колонки в строку

    Имеется таблица T с колонкой A. Сформировать строку,
    содержащую все значения из A разделенные, например, запятой.
    ▲ к быстрой навигации
  • Просуммировать значения колонки по условию

    Таблица T содержит колонку A. Требуется просчитать сумму
    значений в этой колонке, по различным алгоритмам базирующихся
    на значение этой или иной колонки той же таблицы. Вывести
    результаты просчетов в одном резалт-сете.
    ▲ к быстрой навигации
  • Объединить значения колонки B по значениям колонки A

    Таблица T содержит колонки A и B. Каждая строка B содержит
    отдельное значение. Требуется вывести каждое уникальное
    значение колонки A, а все значения колонки B соответствующие
    такому значению A перечислить через запятую.
    ▲ к быстрой навигации
  • Найти минимальное/максимальное значение в каждой строке

    Таблица T содержит числовые колонки A,B,C. Требуется вывести
    все значения этих колонок и плюс дополнительную колонку
    содержащую минимальное/максимальное значение в каждой строке.
    ▲ к быстрой навигации
  • Найти минимальное/максимальное значение во всей таблице

    Таблица T содержит числовые колонки A,B,C. Требуется вывести
    минимальное/максимальное значение среди всех значений всех
    трех колонок, т.е. абсолютный минимум/максимум в границах
    всей таблицы.
    ▲ к быстрой навигации

Изменение данных

  • Удалить "частичные" дубликаты строк из таблицы

    Таблица T состоит из колонок A,B,C. Вы принимаете решение,
    что строчки таблицы содержащие идентичные значения в
    СОЧЕТАНИИ A+C являются дубликатами, B не учитывается.
    Требуется оставить по одному экземпляру каждого дубликата.
    ▲ к быстрой навигации
  • Удалить "полные" дубликаты строк из таблицы

    Таблица T состоит из колонок A,B,C. Вы принимаете решение,
    что строчки таблицы содержащие АБСОЛЮТНО идентичные
    значения во ВСЕХ колонках (регистр строк УЧИТЫВАЕТСЯ!)
    являются дубликатами. Оставить по одному дубликату.
    ▲ к быстрой навигации

Отладка/тестирование

  • Вывести произвольный текст в файл (логирование)

    По некоторым причинам(скорее всего отладка кода) вам
    требуется выводить предопределенный (или динамически
    создаваемый) текст в локальный (с т.з. сервера) файл.
    ▲ к быстрой навигации

Управление сервером

  • Узнать версию, установленный сервис-пак и редакцию сервера

    Для имеющегося сервера(инстанса) выяснить его версию,
    редакцию, а так же установленные на нем сервис-паки.
    ▲ к быстрой навигации
  • Сменить значение коллейшена (collation) сервера

    Для имеющегося сервера(инстанса) сменить его текущее значение
    collation на какое либо иное.
    ▲ к быстрой навигации
  • Найти в логе (Sql Server Log) слово или фразу

    В текущем или архивном логе сервера требуется найти
    некоторую текстовую информацию.
    ▲ к быстрой навигации
  • Удалить все не-системные объекты из системной БД master

    Некоторый скрипт создающий массу пользовательских объектов
    (таблицы, представления, процедуры и пр.) был ошибочно за-
    пущен не в контексте пользовательской базы, а в контексте
    БД master. Требуется "почистить" данную системную базу.
    ▲ к быстрой навигации

Транзакции и сессии

  • Извлечь значения опций текущей сессии

    Каждое отдельное подключение к серверу (сессия) создается с
    рядом настроек (опций), устанавливаемых оператором SET либо
    принимающих значение "по умолчанию" если SET не применялся.
    Требуется узнать текущие значения этих опций.
    ▲ к быстрой навигации

Loading, please wait...

Time-out error while loading snippet! Please, 

close this window

 and try again.

Select this snippet for me, I want Ctrl+C it!

Close