Как стать автором
Поиск
Написать публикацию
Обновить
3

Microsoft SQL Server *

Система управления реляционными базами данных

Сначала показывать
Порог рейтинга
Уровень сложности

PIVOT

Время на прочтение4 мин
Количество просмотров43K
В современных информационных системах, процесс принятие решения, зачастую, строится на основании консолидированной информации. На практике же, при разработке бизнес-логики, оперирующей подобной информацией, очень часто приходится преобразовать строки в столбцы.

В синтаксисе T-SQL для выполнения подобного преобразования предусмотрена отдельная конструкция PIVOT. Стоит заметить, что в SQL Server 2000 поддержки конструкции PIVOT еще не было, поэтому аналогичные задачи решались через множественные CASE WHEN.

Собственно, почему я упомянул о CASE WHEN, если есть PIVOT? Ведь, по определению, PIVOT более элегантная конструкция и, соответственно, должна быть более эффективной.

Проверим это на практике…
Подробнее

Трудности округления в MS SQL Server

Время на прочтение2 мин
Количество просмотров36K
Доброго дня, хабровчане! Пришлось мне в проекте столкнуться с точностью вычислений в MS SQL Server и я обнаружил не совсем интуитивное поведение при выполнении казалось бы интуитивных операций.

Для затравки вопрос (попробуйте ответить на него, не выполняя):
Каков будет результат операции?
declare @var1 decimal(38,10) = 0.0000007,
        @var2 decimal(38,10) = 1;
select @var1 * @var2;

Ответ и объяснение под катом
Читать дальше →

How to generate a CREATE TABLE script for an existing table

Время на прочтение8 мин
Количество просмотров9.7K
SQL Server хранит информацию обо всех объектах и их свойствах в виде метаданных, доступ к которым возможен через системные представления. Кроме того, некоторые из системных представлений скрывают в себе интересные нюансы, позволяющие лучше понять как устроена DBMS.

Чтобы просмотреть тело системного преставления, как впрочем и любого другого скриптового объекта, применяют функцию – OBJECT_DEFINITION:

PRINT OBJECT_DEFINITION(OBJECT_ID('sys.objects'))

Однако, у OBJECT_DEFINITION, также как и у ее аналога sp_helptext, есть существенный недостаток – с их помощью нельзя вернуть скриптовое описание для табличного объекта.

IF OBJECT_ID('dbo.Table1', 'U') IS NOT NULL
  DROP TABLE dbo.Table1
GO

CREATE TABLE dbo.Table1 (ColumnID INT PRIMARY KEY)
GO

EXEC sys.sp_helptext 'dbo.Table1'
SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.Table1', 'U'))

При выполнении sp_helptext мы получим ошибку:

Msg 15197, Level 16, State 1, Procedure sp_helptext, Line 107
There is no text for object 'dbo.Table1'.


При тех же условиях, системная функция OBJECT_DEFINITION вернет NULL.

Также не решит проблемы выборка из sys.sql_modules, поскольку внутри этого системного представления используется все тот же вызов функции OBJECT_DEFINITION:

CREATE VIEW sys.sql_modules AS
    SELECT object_id = o.id,
        definition = object_definition(o.id),
        ...
    FROM sys.sysschobjs o

Такое поведение весьма печально, поскольку для некоторых сценариев, бывает полезно получить скриптовое описание таблицы. Что ж, заглянем в системные представления и создадим аналог функции OBJECT_DEFINITION для работы с табличными объектами.
Подробнее

Generating HTML reports for dynamic table-structures

Время на прочтение4 мин
Количество просмотров5.5K
В относительно недавнем прошлом, возникла задача автоматизировать процесс генерации и рассылки HTML отчетов руководству по продажам за текущий месяц. Так уж вышло, что для каждого руководящего лица создавались отдельные таблицы с необходимой только им информацией.

Поскольку, для каждого отчета, все делалось вручную, что, мягко говоря, было нерациональным.

Было решено генерировать HTML со стороны сервера базы данных и через Database Mail формировать рассылку путем выполнения команды sp_send_dbmail.

Большинство примеров, приведенный в Сети, создавали разметку вручную — это было не слишком эффективным подходом. При этом я не нашел универсального решения, позволяющего работать с таблицой имеющей произвольную структуру.

Чтобы заполнить этот пробел предлагаю на рассмотрение мой вариант решения.
Подробнее

Создание резервных копий БД SQL Server 2014 CTP2 в Windows Azure

Время на прочтение4 мин
Количество просмотров7.9K
Собственно, идея резервировать базу в Облако не нова. Эта функциональность появилась в ныне здравствующем SQL Server 2012 с выходом 21.01.2013 кумулятивного обновления №2 к Service Pack 1 (Build 11.0.3339.0). Мы разбирали ее в посте Создание резервной копии БД в Azure Storage. Поэтому я не буду повторять, что это очень удобная возможность, которая обеспечивает миграцию данных из on-premise SQL Server в облачный (IaaS) и наоборот, а также облегчает перенос базы между двумя разнесенными on-premise SQL Serverами, когда Облако выполняет роль хаба. До сих пор это могло делаться только из скрипта T-SQL. В версии 2014 СТР в этот процесс добавились две новые возможности. Во-первых, выполнять резервное копирование в Windows Azure теперь можно непосредственно из интерфейса SQL Server Management Studio и включать его на регулярной основе в автоматизированный план поддержки базы, и во-вторых, что немаловажно, осуществлять шифрование резервных копий с использованием сертификатов или асимметричных ключей на основе криптостойких алгоритмов защиты. Впрочем, обо всем по порядку.
Читать дальше →

Работа с SQL Server в сценариях гибридного Облака

Время на прочтение5 мин
Количество просмотров4.4K
Гибридное Облако является достаточно привлекательной моделью при внедрении облачных вычислений в информационные системы предприятий, поскольку этот подход сочетает преимущества публичного и частного облака. С одной стороны, достигаются возможности гибкого привлечения внешних ресурсов по мере надобности и сокращения инфраструктурных издержек, с другой — сохраняется полный контроль за данными и приложениями, которые предприятие не хочет отдавать наружу. Однако в подобном сценарии мы неизбежно сталкиваемся с задачей интеграции данных из различных источников. Предположим, имеется таблица клиентов, которую мы вертикально разбили на две части. Обезличенная часть была отнесена в публичное облако, а персонифицирующая клиентов информация осталась в локальной базе. Для целостной обработки внутри приложения необходимо снова соединить обе части по CustomerID. Возможны различные способы это сделать. Условно их можно разбить на две большие категории: объединение данных на уровне on-premise сервера БД, который в этом случае будет выступать единой точкой входа для доступа к локальным и удаленным данным, и внутри бизнес-логики. В этой статье будет рассмотрен первый подход.
Читать дальше →

String aggregation in the SQL Server world

Время на прочтение4 мин
Количество просмотров53K
На практике, задачи по объединению строк в одну попадаются достаточно часто. Весьма печально, но стандарт T-SQL не предусматривает возможности использовании строковых данных внутри агрегирующей функции SUM:

Msg 8117, Level 16, State 1, Line 1
Operand data type char is invalid for sum operator.


Хотя для решения подобного рода задач, для MySQL была добавлена функция GROUP_CONCAT, а в Oracle LISTAGG. В свою же очередь, SQL Server такого встроенного функционала пока не имеет.

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

Выпущен SQL Server 2014 CTP2

Время на прочтение2 мин
Количество просмотров11K
На конференции PASS 2013 вице-президент Microsoft Квентин Кларк объявил о доступности 2-го предварительного выпуска Customer Technology Preview (СТР2) следующей версии сервера баз данных Microsoft SQL Server 2014.
Читать дальше →

ETL-процесс с использованием веб-сервисов в Integration Services 2012

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров18K

Запасаем впрок


Иногда в процессе работы бывают нужны данные из веб-сервисов, тем более SOAP соединения сегодня практически стандарт.

ETL-процесс (Extract — Transform — Load) это термин из Business Intelligence и описывает процесс сбора и трансформации данных для создания аналитической базы данных (например хранилища данных).

SOAP протокол обмена данных и веб-сервисы описываемые WSDL — распространенные окна в мир практически всех ERP систем, многих онлайн порталов и финансовых организаций.

Попробую описать пошагово ETL процесс с помощью одного из мощнейших инструментов в классе — MS Integration Services.

Итак, рассмотрим тестовую задачу.

Задача



Необходимо собрать данные о курсах валют по отношению к рублю на каждую дату прошлого года и загрузить их в таблицу для последующего анализа. Центробанк России предоставляет историчекие данные — в виде веб сервисов с неплохим описанием.
Похоже это и есть решение.
Читать дальше →

Возможности обратной записи (Write Back) в кубах MS SQL Server Analysis Service

Время на прочтение4 мин
Количество просмотров11K
Сегодня все большую популярность завоевывают In-Memory BI решения. Кубы уже не в моде, их структура морально устарела, и хотя они довольно прилично масштабируются, требования к скорости работы современных BI систем значительно возросли. Тем не менее, многие компании до сих пор успешно используют аналитику, построенную на одном из OLAP-серверов (Microsoft, Oracle, Cognos, и др.). Мне, например, очень нравится Microsoft SQL Server Analysis Service, и я хотел бы рассказать, как в нем можно использовать немного необычную для аналитики функцию – обратную запись данных в источник (Write Back).

Читать дальше →

A magic keyword — VALUES…

Время на прочтение4 мин
Количество просмотров10K
Синтаксис конструкции INSERT может показаться весьма тривиальным, поскольку стандарт T-SQL рассматривал ключевое слово VALUES лишь в контексте вставки данных – INSERT INTO … VALUES ….

С выходом SQL Server 2008 существенно расширился синтаксис T-SQL, благодаря чему стало возможным использовать многострочную конструкцию VALUES, при этом не только в контексте вставки.

В данном топике будет рассмотрена сравнительная эффективность использования конструкции VALUES в различных типовых ситуациях. Чтобы дать объективную оценку полученных результатов, для каждого примера, будет рассмотрен его план выполнения.
Подробнее

UNPIVOT

Время на прочтение5 мин
Количество просмотров27K
За время моей работы, я сталкивался с широким кругом задач. Одни задачи требовали монотонной работы, другие сводились к чистому креативу.

Наиболее интересные задачи, которые я могу сейчас вспомнить, так или иначе, затрагивали вопросы оптимизации запросов.

Оптимизация – это, в первую очередь, поиск оптимального плана запроса. Однако, что делать в ситуации, когда стандартная конструкция языка выдает план, который очень далек от оптимального?

С такого рода проблемой я столкнулся, когда применял конструкцию UNPIVOT для преобразования столбцов в строки.

Путем небольшого сравнительного анализа, для UNPIVOT была найдена более эффективная альтернатива.
Подробнее

Хранение служебных баз Team Foundation Server 2013 RC на SQL Server 2014 СТР1

Время на прочтение5 мин
Количество просмотров4.1K
Вещь, о которой я расскажу, ни в коем случае не используйте в рабочем окружении. Чтобы солнышко, как в анекдоте про программиста, всякий раз восходило на востоке, а садилось на западе, лучше вообще от греха подальше пропустить этот материал. В многообразном программном мире автор относится к той категории экстремальщиков, которым во чтобы то ни стало не терпится заглянуть в будущее и попробовать на себе предварительные версии программных продуктов, которые когда-нибудь — кто-то раньше, кто-то позже — станут нашим самым настоящим настоящим. Более того, я бы сказал, нашим всем :) Итак, сегодня в гостях Windows 8.1 Enterprise Preview, Visual Studio 2013 Ultimate Preview, Team Foundation Server 2013 Release Candidate и SQL Server 2014 Evaluation Edition CTP1. Сейчас это все предварительные версии, и, как все предварительные версии, они бесплатны.
Читать дальше →

Ближайшие события

God bless Dynamic SQL

Время на прочтение5 мин
Количество просмотров15K
Широко известна фраза: «Повторение – мать учения». Возможно, это звучит банально, но на втором году работы, я смог в полной мере прочувствовать смысл этой фразы.

С одной стороны, когда человек открывает для себя что-то новое, повторение пройденного, в разумных пределах, позволяет ему лучше закрепить материал. Однако, в моей ситуации, ежедневно приходилось решать функционально схожие задачи. Закономерный результат — плавное снижение мотивации делать это вручную.

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

Далее приведено несколько примеров из жизни, которые решались посредством применения динамического SQL.
Подробнее

Открыта регистрация на SQL Saturday 30 ноября в Москве

Время на прочтение1 мин
Количество просмотров1.6K
SQL Saturday – это бесплатный однодневный тренинг по технологиям Microsoft SQL Server, который проводится в различных странах силами международного сообщества профессиональных DBA и разработчиков под эгидой Professional Association for SQL Server (PASS). Участие в мероприятии — хорошая возможность не только познакомиться с технологическими новшествами, но и пообщаться с коллегами и экспертами в этой области. Традиционно в России докладчиками выступают активные участники Russian SQL Server User Group.
Список докладов пока верстается, однако предварительная регистрация уже открыта на странице мероприятия.

Методика формирования измерения с атрибутами типа 1 и 2

Время на прочтение7 мин
Количество просмотров5.8K
Мы работаем над DWH в телекоммуникациях, поэтому пример, который я рассматриваю, называется «Абонент». Принцип универсален и это мог быть «Клиент» или «Пациент» — в зависимости от отрасли. Я надеюсь методику найдут полезной разработчики DWH из разных отраслей.

Если Вы не понимаете, что такое DWH, измерения и факты, я рекомендую прочитать книгу Ральфа Кимбалла «Dimensional Modeling». Речь идёт о базе данных для аналитики и консолидированной отчетности предприятия, конкретно о формировании и актуализации измерений — таблиц, которые хранят атрибуты (поля) для отбора (WHERE) в будущих запросах.
Прочитать методику с примерами

Встречайте SQL Server 14

Время на прочтение2 мин
Количество просмотров10K
Под этой общей тематикой состоится очередной семинар Russian SQL Server User Group 9 октября в Microsoft Technology Center, Россия, Москва, ул. Лесная д.5, 6-й этаж.

В программе прозвучат доклады:
Читать дальше →

Получение административных привилегий в Microsoft SQL Server

Время на прочтение7 мин
Количество просмотров46K

Введение

После смены рабочей станции начал ставить на нее Micorosft SQL Server 2008 R2 и чуть было не натолкнулся на традиционные грабли, связанные с улучшенной безопасностью в этой версии. Если в Microsoft SQL Server 2005 группа локальных администраторов по умолчанию включалась в роль sysadmin на SQL сервере, то в 2008-й в эту роль не включается никто:

В итоге, в инсталляции по умолчанию получается ситуация, в которой к инстансу не имеет административного доступа никто, то есть сделать с этим инстансом нельзя ничего кроме как периодически перезагружать его. Также такая ситуация возникает, когда тот, кто устанавливал SQL сервер, назначив себя единственным администратором, увольняется — например такая ситуация возникла нашими админами.
Данный пост показывает решение этой проблемы и предоставляет автоматизированное решение этой проблемы в виде скрипта, ровно как и рассказывает историю его написания, иллюстрируя мощь WMI, которая недопустимо замалчивается в литературе и в интернете.
Читать дальше →

Реализация выборки, кэширования и отрисовки фотографий на карте

Время на прочтение13 мин
Количество просмотров11K

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



Так как в нашем сервисе было очень много фотографий и посылать запросы к БД при каждом изменении окна просмотра слишком ресурсозатратно, логично было разбить карту на участки, в которых хранилась бы информация об уже извлеченных данных. Эти участки по вполне понятным причинам имеют прямоугольную форму (хотя вариант с гексагональной сеткой тоже рассматривался). Так как при больших масштабах участки становятся более сферообразными, то элементы сферической геометрии и инструменты для работы с ней также были рассмотрены.


В данной статье были затронуты следующие проблемы:


  • Хранение и выборка фотографий из БД и помещение их в серверный кэш (SQL, C#, ASP.NET).
  • Загрузка необходимых фотографий на стороне клиента и помещение их в клиентский кэш (JavaScript).
  • Перерасчет фотографий, которые нужно скрыть или отобразить при каждом изменении окна просмотра.
  • Элементы сферической геометрии.
Всем интересующимся добро пожаловать под кат

Постраничная выборка данных — альтернативный взгляд на давно известное

Время на прочтение8 мин
Количество просмотров16K
Проблема постраничной выборки информации из БД стара, как сама БД, и соответственно, обсуждена не одну тысячу раз. Нет, пожалуй, ни одной клиент-серверной системы, в которой эта проблема так или иначе не была бы адресована и решена. Сегодня я хочу рассказать об одном немного нестандартном способе взаимодействия клиентского слоя и MS SQL-бакенда при организации постраничной выборки в типичном публичном веб-приложении.
Читать дальше →