<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SQL Server | The .NET Blog</title><link>https://thedotnetblog.com/it/tags/sql-server/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>it</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/it/tags/sql-server/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft SQL Metà 2026: Il Silenzioso Passaggio da Motore Database a Piattaforma Dati AI</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</guid><description>L'ondata di aggiornamenti SQL 2026 mostra una transizione strategica: SQL non è più solo un livello di persistenza, sta diventando la spina dorsale operativa governata per applicazioni agentiche.</description><content:encoded>&lt;p&gt;La prima metà del 2026 per Microsoft SQL non è solo una lunga lista di rilasci. È un segnale direzionale. SQL Server, Azure SQL e SQL database in Fabric stanno convergendo verso una postura di piattaforma dove dati, governance e workflow AI sono progettati per coesistere invece di essere imbullonati insieme.&lt;/p&gt;
&lt;p&gt;Fonte originale: &lt;a href="https://devblogs.microsoft.com/azure-sql/whats-new-across-microsoft-sql-in-2026-so-far-sql-server-azure-sql-and-sql-database-in-fabric/"&gt;https://devblogs.microsoft.com/azure-sql/whats-new-across-microsoft-sql-in-2026-so-far-sql-server-azure-sql-and-sql-database-in-fabric/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A livello di motore, funzionalità GA come AI_GENERATE_EMBEDDINGS, oggetti External Model e controlli di identità a livello server Entra mostrano che &amp;ldquo;l&amp;rsquo;AI nei workflow del database&amp;rdquo; è ora mainstream, non una novità in preview. A livello operativo, i miglioramenti di Hyperscale e Managed Instance, opzioni di crittografia più forti e CU regolari indicano che la classica disciplina di affidabilità e sicurezza è ancora intatta.&lt;/p&gt;
&lt;p&gt;La storia del tooling è ugualmente importante. SSMS ottiene la modalità agente Copilot, schema compare, miglioramenti del formattatore SQL e contesto di esecuzione più ricco. L&amp;rsquo;estensione MSSQL di VS Code continua a spingere notebook, progettazione schema con assistenza AI, integrazione DAB e workflow di provisioning Azure. Questo investimento a doppio binario dice che Microsoft si aspetta che gli sviluppatori rimangano poliglotti nella scelta dell&amp;rsquo;IDE mentre standardizzano su capacità condivise del piano dati.&lt;/p&gt;
&lt;p&gt;La mia conclusione più forte: &lt;strong&gt;SQL MCP Server è il trend centrale&lt;/strong&gt;. Una volta che le entità SQL sono esposte in modo sicuro come interfacce toolable per gli agenti, il database smette di essere storage passivo e diventa un partecipante attivo nell&amp;rsquo;orchestrazione. Questo crea nuova leva, ma alza anche l&amp;rsquo;asticella per l&amp;rsquo;architettura di sicurezza, la propagazione dell&amp;rsquo;identità e la verificabilità.&lt;/p&gt;
&lt;p&gt;Cosa dovrebbero fare i team ora?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scegli una corsia di migrazione e eseguila con determinazione.&lt;/strong&gt; O modernizza la pipeline schema/dev attorno a SQL projects più CI/CD, o concentrati sulla governance MCP-ready e sui controlli di accesso ai dati. Cercare di assorbire ogni annuncio di funzionalità in parallelo bloccherà la consegna.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stabilisci una baseline di identità unica&lt;/strong&gt; con autenticazione Entra dove possibile. I pattern di autenticazione mista sono il percorso più veloce verso un&amp;rsquo;applicazione di policy incoerente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tratta gli aggiornamenti dell&amp;rsquo;ecosistema driver come lavoro critico per la produzione&lt;/strong&gt;, non rumore di manutenzione. SqlClient, ODBC, OLE DB, connettori Python e adapter Django hanno tutti spedito cambiamenti significativi di affidabilità e compatibilità. Se il tuo stack applicativo copre più linguaggi, la tua affidabilità dei dati è forte solo quanto il driver meno aggiornato in produzione.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo è il vero messaggio del 2026 finora: Microsoft SQL sta diventando il nucleo operativo per sistemi agentici. I team che modernizzano con la governance in mente si muoveranno più velocemente. I team che inseguono funzionalità senza disciplina di piattaforma accumuleranno complessità costosa.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 come database pronto per gli agenti: sicurezza, backup e MCP in un solo motore</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>La parte finale della serie Polyglot Tax affronta i problemi di produzione più difficili: una Row-Level Security unificata su dati relazionali, JSON, graph e vector, più i tracciati di audit crittografici e l'integrazione MCP che rendono SQL Server 2025 davvero pronto per gli agenti.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ho seguito la serie Polyglot Tax di Aditya Badramraju con grande interesse. Le parti 1-3 hanno costruito un caso convincente per SQL Server 2025 come database davvero multi-model — JSON, graph, vector e dati relazionali tutti in un solo motore con un query planner unificato. La parte 4 chiude la serie con le parti che determinano davvero se ti fideresti di questa architettura in produzione.&lt;/p&gt;
&lt;p&gt;Spoiler: la storia di produzione è solida.&lt;/p&gt;
&lt;h2 id="un-solo-modello-di-sicurezza-per-tutti-i-modelli-di-dati"&gt;Un Solo Modello di Sicurezza per Tutti i Modelli di Dati&lt;/h2&gt;
&lt;p&gt;Ecco il punto critico degli stack poliglotti: quando un auditor chiede &amp;ldquo;dimostra che il Tenant A non può vedere i dati del Tenant B&amp;rdquo;, devi rispondere a questa domanda per ogni database separatamente. Cinque database, cinque modelli di sicurezza, cinque prove.&lt;/p&gt;
&lt;p&gt;Con SQL Server 2025, definisci una sola policy di Row-Level Security e copre tutti i modelli di dati:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FUNCTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RETURNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SCHEMABINDING&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn_result&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SESSION_CONTEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TenantID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECURITY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;POLICY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TenantIsolation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Relational
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- JSON data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Relationships&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Graph edges
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embeddings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Vector data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;STATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Da quel momento, ogni query — join relazionali, query su path JSON, traversali graph, ricerche di similarità vector — viene filtrata automaticamente per tenant. Il motore inserisce il predicate nel piano di esecuzione prima che qualsiasi dato lasci lo storage. Il tuo codice chiamante non deve scrivere &lt;code&gt;WHERE TenantID = @id&lt;/code&gt; ovunque. Testi la policy una sola volta.&lt;/p&gt;
&lt;p&gt;I livelli si compongono ulteriormente: Dynamic Data Masking per le colonne che non dovrebbero mostrare i valori completi a certi ruoli, Always Encrypted per la crittografia end-to-end (perfino i DBA non possono leggerla), e le stored procedure come confine di autorizzazione così che gli agenti chiamino solo ciò che hai esposto esplicitamente.&lt;/p&gt;
&lt;p&gt;Questa è la parte dell&amp;rsquo;architettura che conta di più per un SaaS con forti requisiti di compliance. Una policy, una prova.&lt;/p&gt;
&lt;h2 id="backup-unificato--recupero-atomico"&gt;Backup Unificato = Recupero Atomico&lt;/h2&gt;
&lt;p&gt;Una sola istruzione, tutti i modelli di dati, un punto nel tempo coerente:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BACKUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;COMPRESSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENCRYPTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ALGORITHM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AES_256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SERVER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CERTIFICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BackupCert&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;RESTORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STOPAT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2026-02-01 10:30:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In uno stack poliglotta, il point-in-time recovery su cinque database significa coordinare cinque operazioni di restore e sperare che i timestamp coincidano entro uno o due secondi. Per i dati finanziari, quella differenza di due secondi è inaccettabile. Con un solo database, un solo transaction log, un solo restore — il recovery è atomico per definizione.&lt;/p&gt;
&lt;h2 id="tabelle-ledger-per-tracce-di-audit-a-prova-di-manomissione"&gt;Tabelle Ledger per Tracce di Audit a Prova di Manomissione&lt;/h2&gt;
&lt;p&gt;Per i settori regolamentati, non basta dire &amp;ldquo;abbiamo i log&amp;rdquo;. Serve la prova crittografica che quei log non siano stati modificati:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FinancialTransactions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccountID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MONEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSUTCDATETIME&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_VERSIONING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LEDGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ogni insert, update e delete viene hashato crittograficamente in una struttura in stile blockchain. Puoi dimostrare a un auditor — matematicamente — che una riga non è stata manomessa da quando è stata scritta. In uno stack poliglotta, questa capacità non esiste in modo uniforme in tutti i tuoi database.&lt;/p&gt;
&lt;h2 id="integrazione-mcp-agenti-senza-middleware-scritto-a-mano"&gt;Integrazione MCP: Agenti Senza Middleware Scritto a Mano&lt;/h2&gt;
&lt;p&gt;La serie stava arrivando proprio qui: SQL Server 2025 supporta direttamente SQL MCP Server, il che significa che i tuoi agenti possono chiamare il database tramite tool call in linguaggio naturale senza che tu scriva middleware per ogni operazione.&lt;/p&gt;
&lt;p&gt;Combina questo con le stored procedure come confine di autorizzazione e con la Row-Level Security applicata dal motore, e ottieni un modello in cui:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L&amp;rsquo;agente chiama uno strumento, ad esempio &amp;ldquo;recupera il contesto cliente per l&amp;rsquo;account 12345&amp;rdquo;&lt;/li&gt;
&lt;li&gt;MCP lo traduce nella stored procedure che hai definito&lt;/li&gt;
&lt;li&gt;Il motore SQL applica automaticamente isolamento tenant e mascheramento delle colonne&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;agente riceve esattamente i dati che è autorizzato a vedere&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nessun livello middleware. Nessun rischio di injection di query ad hoc. L&amp;rsquo;autorizzazione la gestisce il motore, non l&amp;rsquo;agente.&lt;/p&gt;
&lt;h2 id="perché-questo-conta-per-gli-sviluppatori-net"&gt;Perché Questo Conta per gli Sviluppatori .NET&lt;/h2&gt;
&lt;p&gt;Se stai costruendo servizi .NET con SQL Server come archivio primario, il messaggio di questa serie è: non hai bisogno di aggiungere Redis per la cache, un database graph per le relazioni o un vector store per le embeddings. SQL Server 2025 gestisce tutto questo — con una consistenza operativa migliore di uno stack poliglotta e una sicurezza unificata che è davvero auditabile.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;integrazione MCP significa che i tuoi agenti Semantic Kernel o i workflow di Microsoft Agent Framework possono interagire con il livello dati attraverso lo stesso SQL MCP Server, con le stesse garanzie di sicurezza che imporresti alle query umane.&lt;/p&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;La serie Polyglot Tax merita di essere letta dall&amp;rsquo;inizio alla fine. Le parti 1-3 dimostrano la storia del query planner. La parte 4 dimostra la storia di produzione. Per gli sviluppatori .NET che costruiscono applicazioni agent-first o AI-augmented su Azure SQL, questa architettura merita seria considerazione.&lt;/p&gt;
&lt;p&gt;Post originale di Aditya Badramraju: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>