1 апреля 2012 г. стала доступна финальная версия Microsoft SQL Server 2012.
В новой версии появилось большое количество нововведений.
В данной статье я хотел бы подробнее остановиться на обзоре ряда новшеств для разработчика баз данных.
1. Новые предложения OFFSET и FETCH для ограничения числа возвращаемых строк
Наконец-то в SQL Server появился нормальный пейджинг.
Теперь запрос для получения вторых 10 записей набора (2-я страница) выглядит так:
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
В версиях SQL 2005/2008 мы должны были писать примерно так:
WITH CTE AS
(
SELECT DepartmentID, Name, GroupName, ROW_NUMBER() OVER (ORDER BY DepartmentID) AS RowNum
FROM HumanResources.Department
)
SELECT DepartmentID, Name, GroupName
FROM CTE
WHERE RowNum BETWEEN 10 AND 19
ORDER BY RowNum
Подробнее тут: msdn.microsoft.com/ru-ru/library/ms188385.aspx#Offset
2. В предложении OVER была расширена поддержка оконных функций
С помощью предложений ROWS или RANGE можно еще больше ограничить строки в пределах секции, указывая начальную и конечную точки.
Например, запрос для вывода нарастающего итога:
SELECT DepartmentID,
SaleDate,
SUM(SalesYTD) OVER (PARTITION BY DepartmentID ORDER BY SaleDate ROWS UNBOUNDED PRECEDING) AS Total
FROM dbo.Sales
Подробнее тут: msdn.microsoft.com/ru-ru/library/ms189461.aspx
3. Добавлены аналитические функции
- FIRST_VALUE
- LAST_VALUE
- CUME_DIST
- PERCENTILE_DISC
- PERCENT_RANK
- PERCENTILE_CONT
- LEAD
- LAG
Например, в одном из проектов мне нужно расчитывать четыре цены для свечки (open, high, low, close).
Теперь запрос превращается в тривиальный:
SELECT MIN(Ask) OVER (PARTITION BY Pair, Candle) AS Low,
MAX(Ask) OVER (PARTITION BY Pair, Candle) AS High,
FIRST_VALUE(Ask) OVER (PARTITION BY Pair, Candle) AS Open,
LAST_VALUE(Ask) OVER (PARTITION BY Pair, Candle) AS Close
FROM dbo.Quotes
WHERE Pair='EURUSD' and Candle = 100
4. Появились последовательности (SEQUENCE)
Еще одно долгожданное улучшение. Каких только костылей не приходилось городить, чтобы реализовать нумерацию документов с начала года.
Пример использования:
CREATE SEQUENCE Schema.SequenceName
AS int
START WITH 1
INCREMENT BY 1 ;
DECLARE @NextID int ;
SET @NextID = NEXT VALUE FOR Schema.SequenceName;
5. На смену RAISERROR пришла инструкция THROW
THROW 51000, 'The record does not exist.', 1;
BEGIN TRY
SET @a = 10 / 0
END TRY
BEGIN CATCH
PRINT 'In catch block.';
THROW;
END CATCH;
6. Появилось 14 новых функций
Функции преобразования:
- PARSE
- TRY_CONVERT
- TRY_PARSE
Функции даты и времени:
- DATEFROMPARTS
- DATETIME2FROMPARTS
- DATETIMEFROMPARTS
- DATETIMEOFFSETFROMPARTS
- EOMONTH
- SMALLDATETIMEFROMPARTS
- TIMEFROMPARTS
Логические функции:
- CHOOSE
- IIF
Строковые функции:
- CONCAT
- FORMAT
Я бы отнес это к эстетическим улучшениям.
Например, раньше последний день месяца получали так:
SET @LastDayOfMonth = dateadd(month,1,dateadd(day,1-day(@d),@d))-1
В SQL Server 2012:
SET @LastDayOfMonth = EOMONTH (@d)
Или, вместо:
CASE WHEN (@a > @b) THEN 'TRUE' ELSE 'FALSE' END
Tеперь можно написать:
IIF ( @a > @b, 'TRUE', 'FALSE' )
7. Таблицы FileTable
Теперь SQL Server обеспечивает хранение файлов и документов в специальных таблицах, при этом доступ к ним возможен из приложений Windows таким же образом, как если бы они хранились в файловой системе, без внесения каких-либо изменений в приложения Windows.
Подробнее тут: msdn.microsoft.com/ru-ru/library/ff929144.aspx
8. Статистический семантический поиск
Совместно с функцией FileTable статистический семантический поиск обеспечивает глубокий анализ неструктурированных документов.
Семантический поиск построен на основе существующего компонента полнотекстового поиска в SQL Server и реализует новые сценарии, обеспечивая поиск не по ключевым словам, а по значению документа.
Например, по индексу ключевых фраз можно построить классификацию или свод технической документации. Или по индексу схожести документов найти резюме лучше всего подходящие к описанию должности.
Подробнее тут: msdn.microsoft.com/ru-ru/library/gg492075.aspx
Автор: SlavaLukash