Сводка
В этом модуле вы узнали расширенные методы T-SQL, которые помогают создавать более экспрессивный, эффективный и обслуживаемый код базы данных. Эти возможности рассматривают распространенные сценарии разработки баз данных, включающие сложную аналитику, иерархические данные, обработку JSON и обработку ошибок.
Вы узнали, как:
- Написание общих табличных выражений (CTEs) для организации сложных запросов и использования рекурсивных шаблонов для обхода иерархических структур данных
- Применение функций окна для ранжирования, подсчета промежуточных итогов, скользящих средних и аналитических вычислений, сохраняющих детализацию на уровне строк.
- Использование функций JSON, включая
JSON_OBJECT,JSON_ARRAY,JSON_ARRAYAGGOPENJSONиJSON_VALUEдля анализа, создания и преобразования данных JSON - Реализуйте регулярные выражения с
REGEXP_LIKE,REGEXP_REPLACE,REGEXP_SUBSTRи связанных функций для сопоставления шаблонов и обработки текста. - Поиск приблизительных совпадений с помощью нечетких строковых функций, таких как
EDIT_DISTANCE,EDIT_DISTANCE_SIMILARITYиJARO_WINKLER_DISTANCE - Создайте таблицы графов и напишите запросы с помощью
MATCHоператора иSHORTEST_PATHдля траверсирования связей - Написать коррелированные подзапросы для построчного сравнения, проверки существования и вычислений для каждой строки
- Реализуйте структурированную обработку ошибок с помощью
TRY...CATCHфункций для обработки ошибок,THROWи надлежащего управления транзакциями.
Основные выводы
- Рекурсивные CTE являются стандартным подходом для обхода иерархических данных, таких как организационные диаграммы или структуры спецификаций материалов
- Функции окна с
OVERпредложениями позволяют аналитические вычисления без сворачивания строк. Используйте их вместо самосоединений для вычисления накопительных итогов и ранжирования -
JSON_OBJECTиJSON_ARRAYAGGсоздают JSON из реляционных данных, в то время какOPENJSONразбирает JSON на реляционные строки -
JARO_WINKLER_DISTANCEоптимизирован для сопоставления имен;EDIT_DISTANCE_SIMILARITYлучше подходит для более длинных строк - Всегда проверяйте
@@TRANCOUNTперед блокамиROLLBACKвCATCH, чтобы обрабатывать случаи, когда транзакция неактивна. - Объедините
SET XACT_ABORT ONсTRY...CATCHдля полной защиты транзакций.