📖 Šta je CLR u SQL Serveru?
Common Language Runtime (CLR) integracija omogućava da pišete proceduru, funkciju, triger ili čak tip podatka koristeći C# ili VB.NET. Dok je T-SQL neprikosnoven za manipulaciju podacima, on je limitiran kada je u pitanju kompleksna logika, obrada teksta (Regex) ili matematički algoritmi.
🎯 Kada odabrati CLR umjesto T-SQL-a?
- Regex (Regularne ekspresije): T-SQL nema native podršku za Regex, CLR ima.
- Kompleksna matematika: Kriptografija, napredna statistika ili naučni izračuni.
- Eksterna komunikacija: Slanje fajlova na disk ili pozivanje specifičnih Windows servisa (oprez!).
- CPU-Intenzivne operacije: C# se kompajlira u mašinski kod, T-SQL se interpretira.
🛡️ Sigurnosni Nivoi (Permission Sets)
Pri uvozu .NET koda, morate ga kategorisati u jedan od tri nivoa:
- SAFE (Preporučeno): Kod može pristupati samo podacima unutar baze. Nema pristupa fajlovima, mreži ili registry ključevima.
- EXTERNAL_ACCESS: Dozvoljava pristup eksternim resursima (fajlovi, mreža) uz strogu kontrolu.
- UNSAFE: Potpuni pristup svemu što i sam SQL Server proces može doseći. Visok rizik, rijetko se koristi u produkciji.
🛠️ Proces Implementacije
Korak 1: Omogućavanje CLR-a na serveru
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
Korak 2: Kreiranje i registracija Assembly-ja
Nakon što kreirate DLL u Visual Studiju, uvozite ga u bazu:
CREATE ASSEMBLY MyExtensions
FROM 'C:\Binaries\MyExtensions.dll'
WITH PERMISSION_SET = SAFE;
GO
Korak 3: Povezivanje .NET metoda sa SQL funkcijom
CREATE FUNCTION dbo.fn_IsValidEmail(@email NVARCHAR(MAX))
RETURNS BIT
AS EXTERNAL NAME MyExtensions.[MyExtensions.Validators].IsValidEmail;
GO
🎯 Praktična Vježba: Regex u SQL-u
Zadatak: Validacija formata (C# kod)
U T-SQL-u je teško provjeriti da li string odgovara formatu ABC-1234-XYZ.
Koristićemo C# Regex podršku.
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
public class MyValidators {
[SqlFunction]
public static bool IsSpecialFormat(string input) {
return Regex.IsMatch(input, @"^[A-Z]{3}-\d{4}-[A-Z]{3}$");
}
}
-- Test koda nakon registracije
SELECT dbo.fn_IsSpecialFormat('ABC-1234-XYZ') -- Vraća 1
SELECT dbo.fn_IsSpecialFormat('AB1234XYZ') -- Vraća 0
✅ Zaključak Modula 3
Završili smo modul o programabilnosti. Sada ste sposobni da izgradite kompletnu logiku unutar baze podataka:
- ✅ Views za apstrakciju i sigurnost.
- ✅ Stored Procedure za robusne poslovne procese.
- ✅ Functions (UDF) za brze izračune unutar upita.
- ✅ Trigeri za automatski audit i zaštitu integriteta.
- ✅ CLR za ekstremne slučajeve gdje T-SQL nije dovoljan.
📚 Modul 4: Specijalizovano Skladištenje
U sljedećem modulu prelazimo na "egzotične" tehnologije. Istražićemo In-Memory OLTP za baze koje moraju raditi sa nula milisekundi kašnjenja, te rad sa XML i Prostornim podacima (GIS).