sql server clr integration
DESCRIPTION
Sql server clr integration by Oleksiy DavidichTRANSCRIPT
SQL Server CLR Integration
Как подружить C# и T-SQL
Software EngineerM. C. Dean
Алексей Давидич
Обзор
Необходимость появления SQL CLR
Сравнение T-SQL и C#Вопросы производительностьВозможности SQL CLR
А что не так?
T-SQL не является оптимальным языком программирования для ряда задач
Удобство
Улучшенная парадигма программирования
Упрощённая разработка
Скорость
Возможность получить более производительные и гибкие решения
Безопасность
Механизм Code Access Security (CAS)
Выбор между C# и T-SQL
T-SQL Прямой доступ к
данным Большие объёмы
данных Отсутствие
сложной логики
C# Сложные
вычисления Работа со
строками Ветвистая логика Работа с RegEx Шифрование Прямой доступ к
файловой системе
…
Давайте заглянем под капот
Реализация SQL CLR интеграции
CLR HOST
SQL Query
Execution Plan
Compiler
JIT
MSIL
Native BRIDGE
Список возможных объектов
CLR User-Defined Functions CLR Scalar-Valued Functions CLR Table-Valued Functions CLR User-Defined Aggregates
CLR User-Defined TypesCLR Stored ProceduresCLR Triggers
Активизация CLR Integration
sp_configure 'show advanced options', 1;GO
RECONFIGURE;GO
sp_configure 'clr enabled', 1;GO
RECONFIGURE;GO
Hello world DEMO
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
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
Сравнение производительности
DEMO: Сравнение производительности
T-SQL vs C# for Splitting Strings
!!! 227 раз быстрее !!!
T-SQL vs C# for Splitting Strings
DEMO: Table-Valued Function
Streaming Table-Valued Functions
Новый механизм, на порядок превосходящий раннюю реализацию в extended store procedure.
Возвращает IEnumerable, подключаемый напрямую к плану запроса
Уменьшаем время доступаСнижает накладные издержки
расхода памяти
Особенности UDF
TVP (in & out) не применимы при использования контекстного соединения
Update, Insert & Delete запрещены
CLR TVF не поддерживают constraints и индексы уникальности
CLR TVF не могут вернуть таблицу с колонками типа Timestamp или non-unicode текст
DEMO: User Defined Aggregate
Context connection
Context vs regular connection
DEMO: Stored Procedure (part 1)
In-Process расширения ADO.NET
SqlContext – предоставляет доступ к другим расширениям, а также некоторую информацию о контексте исполнения SqlPipe - для возврата табличных данных и
сообщений клиенту SqlTriggerContext - представляет информацию
о контексте в котором срабатывает триггерSqlDataRecord - для возврата
динамически конфигурируемых наборов данных из хранимой процедуры
DEMO: Stored Procedure (part 2)
DEMO: User Defined Type & Trigger
DEMO: Moving BL to SQL Server
Timesheet review
Полезные ссылки
MSDN: http://msdn.microsoft.com/en-us/library/ms131102(SQL.100).aspx
Cookbook (O’REILLY) : http://msdn.microsoft.com/en-us/library/orm-9780596101404-02-12.aspx
MSDN Blog (Exception handling): http://blogs.msdn.com/b/sqlclr/archive/2006/06/29/651649.aspx
Спасибо!