sql server clr integration

32
SQL Server CLR Integration Как подружить C# и T-SQL Software Engineer M. C. Dean Алексей Давидич

Upload: alex-tumanoff

Post on 28-Dec-2014

544 views

Category:

Documents


1 download

DESCRIPTION

Sql server clr integration by Oleksiy Davidich

TRANSCRIPT

Page 1: Sql server clr integration

SQL Server CLR Integration

Как подружить C# и T-SQL

Software EngineerM. C. Dean

Алексей Давидич

Page 2: Sql server clr integration

Обзор

Необходимость появления SQL CLR

Сравнение T-SQL и C#Вопросы производительностьВозможности SQL CLR

Page 3: Sql server clr integration

А что не так?

T-SQL не является оптимальным языком программирования для ряда задач

Page 4: Sql server clr integration

Удобство

Улучшенная парадигма программирования

Упрощённая разработка

Page 5: Sql server clr integration

Скорость

Возможность получить более производительные и гибкие решения

Page 6: Sql server clr integration

Безопасность

Механизм Code Access Security (CAS)

Page 7: Sql server clr integration

Выбор между C# и T-SQL

T-SQL Прямой доступ к

данным Большие объёмы

данных Отсутствие

сложной логики

C# Сложные

вычисления Работа со

строками Ветвистая логика Работа с RegEx Шифрование Прямой доступ к

файловой системе

Page 8: Sql server clr integration

Давайте заглянем под капот

Page 9: Sql server clr integration

Реализация SQL CLR интеграции

CLR HOST

SQL Query

Execution Plan

Compiler

JIT

MSIL

Native BRIDGE

Page 10: Sql server clr integration

Список возможных объектов

CLR User-Defined Functions CLR Scalar-Valued Functions CLR Table-Valued Functions CLR User-Defined Aggregates

CLR User-Defined TypesCLR Stored ProceduresCLR Triggers

Page 11: Sql server clr integration

Активизация CLR Integration

sp_configure 'show advanced options', 1;GO

RECONFIGURE;GO

sp_configure 'clr enabled', 1;GO

RECONFIGURE;GO

Page 12: Sql server clr integration

Hello world DEMO

Page 13: Sql server clr integration

Deployment

Компиляция csc /target:library [name].cs

Загрузка сборки на серверCREATE ASSEMBLY myAssemblyFROM 'c:\[name].dll' WITH PERMISSION_SET = SAFE

Создание хранимой процедурыCREATE PROCEDURE hello @i nchar(25) OUTPUT AS EXTERNAL NAME myAssembly.MyNamespace.myStoreProc

Page 14: Sql server clr integration

Permission levels

SQL запрос

Query Processor

SQL CLR Module(Store procedure, UDFs, UDTs, UDAs, Triggers)

SQL Server

Результат

CLR Hosting Module (.Net Framework)

SQL Server Database Engine

Database

SAFEFiles,

Registry, Network

Native DLLs, COM DLLs

EXTERNAL _ACCESS UNSAFE

Page 15: Sql server clr integration

Сравнение производительности

Page 16: Sql server clr integration

DEMO: Сравнение производительности

Page 17: Sql server clr integration

T-SQL vs C# for Splitting Strings

!!! 227 раз быстрее !!!

Page 18: Sql server clr integration

T-SQL vs C# for Splitting Strings

Page 19: Sql server clr integration

DEMO: Table-Valued Function

Page 20: Sql server clr integration

Streaming Table-Valued Functions

Новый механизм, на порядок превосходящий раннюю реализацию в extended store procedure.

Возвращает IEnumerable, подключаемый напрямую к плану запроса

Уменьшаем время доступаСнижает накладные издержки

расхода памяти

Page 21: Sql server clr integration

Особенности UDF

TVP (in & out) не применимы при использования контекстного соединения

Update, Insert & Delete запрещены

CLR TVF не поддерживают constraints и индексы уникальности

CLR TVF не могут вернуть таблицу с колонками типа Timestamp или non-unicode текст

Page 22: Sql server clr integration

DEMO: User Defined Aggregate

Page 23: Sql server clr integration

Context connection

Page 24: Sql server clr integration

Context vs regular connection

Page 25: Sql server clr integration

DEMO: Stored Procedure (part 1)

Page 26: Sql server clr integration

In-Process расширения ADO.NET

SqlContext – предоставляет доступ к другим расширениям, а также некоторую информацию о контексте исполнения SqlPipe  - для возврата табличных данных и

сообщений клиенту SqlTriggerContext  - представляет информацию

о контексте в котором срабатывает триггерSqlDataRecord - для возврата

динамически конфигурируемых наборов данных из хранимой процедуры

Page 27: Sql server clr integration

DEMO: Stored Procedure (part 2)

Page 28: Sql server clr integration

DEMO: User Defined Type & Trigger

Page 29: Sql server clr integration

DEMO: Moving BL to SQL Server

Page 30: Sql server clr integration

Timesheet review

Page 32: Sql server clr integration

Спасибо!