SQL Server 2012 — что нового для разработчика? - Моя ХАТА

SQL Server 2012 — что нового для разработчика?

1 апреля 2012 г. стала доступна финальная версия Microsoft sql server 2012 администрирование 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

2. В предложении OVER была расширена поддержка оконных функций
С помощью предложений ROWS или RANGE можно еще больше ограничить строки в пределах секции, указывая начальную и конечную точки.
Например, запрос для вывода нарастающего итога:

SELECT  DepartmentID,
	SaleDate,
	SUM(SalesYTD) OVER (PARTITION BY DepartmentID ORDER BY SaleDate ROWS UNBOUNDED PRECEDING) AS Total
FROM dbo.Sales 

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 и реализует новые сценарии, обеспечивая поиск не по ключевым словам, а по значению документа.
Например, по индексу ключевых фраз можно построить классификацию или свод технической документации. Или по индексу схожести документов найти резюме лучше всего подходящие к описанию должности.