<?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/ca/tags/sql-server/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ca</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/ca/tags/sql-server/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft SQL Mig Any 2026: El Canvi Silenciós de Motor de Base de Dades a Plataforma de Dades d'IA</title><link>https://thedotnetblog.com/ca/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/ca/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</guid><description>L'onada d'actualitzacions de SQL de 2026 mostra una transició estratègica: SQL ja no és només una capa de persistència, sinó que s'està convertint en el backbone d'execució governat per a aplicacions agèntiques.</description><content:encoded>&lt;p&gt;El primer semestre de 2026 per a Microsoft SQL no és només una llarga llista de llançaments. És un senyal direccional. SQL Server, Azure SQL i SQL database a Fabric convergeixen cap a una postura de plataforma on les dades, la governança i els fluxos de treball d&amp;rsquo;IA estan dissenyats per coexistir en lloc d&amp;rsquo;ajuntar-se.&lt;/p&gt;
&lt;p&gt;Font original: &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 la capa de motor, les funcions GA com AI_GENERATE_EMBEDDINGS, els objectes External Model i els controls d&amp;rsquo;identitat a nivell de servidor d&amp;rsquo;Entra mostren que &amp;ldquo;IA als fluxos de treball de base de dades&amp;rdquo; ja és corrent, no una novetat de previsualització. A la capa operativa, les millores d&amp;rsquo;Hyperscale i Managed Instance, opcions d&amp;rsquo;encriptació més sòlides i CUs regulars indiquen que la disciplina clàssica de fiabilitat i seguretat encara està intacta.&lt;/p&gt;
&lt;p&gt;La història d&amp;rsquo;eines és igualment important. SSMS rep mode d&amp;rsquo;agent Copilot, comparació d&amp;rsquo;esquemes, millores de format SQL i context d&amp;rsquo;execució més ric. L&amp;rsquo;extensió MSSQL de VS Code segueix impulsant notebooks, disseny d&amp;rsquo;esquemes amb assistència d&amp;rsquo;IA, integració DAB i fluxos de treball de provisionament d&amp;rsquo;Azure. Aquesta inversió de doble via diu que Microsoft espera que els desenvolupadors segueixin sent poliglota en l&amp;rsquo;elecció d&amp;rsquo;IDE mentre estandarditzen en capacitats compartides del pla de dades.&lt;/p&gt;
&lt;p&gt;La meva opinió més forta: SQL MCP Server és la tendència central. Un cop les entitats SQL estan exposades de manera segura com a interfícies toolable per a agents, la base de dades deixa de ser emmagatzematge passiu i es converteix en un participant actiu a l&amp;rsquo;orquestració. Això crea nou palanquejament, però també eleva el llistó per a l&amp;rsquo;arquitectura de seguretat, la propagació d&amp;rsquo;identitat i l&amp;rsquo;auditabilitat.&lt;/p&gt;
&lt;p&gt;Què haurien de fer els equips ara?&lt;/p&gt;
&lt;p&gt;Trieu un carril de migració i executeu-lo amb determinació. O modernitzeu el vostre pipeline d&amp;rsquo;esquema/desenvolupament al voltant de SQL projects més CI/CD, o centreu-vos en la governança preparada per a MCP i els controls d&amp;rsquo;accés a dades. Intentar absorbir cada anunci de funció en paral·lel encallarà el lliurament. També, establiu una única línia base d&amp;rsquo;identitat amb autenticació Entra sempre que sigui possible. Els patrons d&amp;rsquo;auth mixts són el camí més ràpid cap a l&amp;rsquo;aplicació de polítiques inconsistent.&lt;/p&gt;
&lt;p&gt;Finalment, tracteu les actualitzacions de l&amp;rsquo;ecosistema de drivers com a treball crític de producció, no com a soroll de manteniment. SqlClient, ODBC, OLE DB, connectors Python i adaptadors Django van enviar canvis significatius de fiabilitat i compatibilitat. Si el vostre stack d&amp;rsquo;aplicacions abasta llenguatges, la vostra fiabilitat de dades només és tan forta com el driver menys actualitzat en producció.&lt;/p&gt;
&lt;p&gt;Aquest és el veritable missatge de 2026 fins ara: Microsoft SQL s&amp;rsquo;està convertint en el nucli operatiu per a sistemes agèntics. Els equips que modernitzin amb governança al cap avançaran més ràpid. Els equips que persegueixin funcions sense disciplina de plataforma acumularan complexitat costosa.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 com a base de dades preparada per a agents: seguretat, còpies de seguretat i MCP en un sol motor</title><link>https://thedotnetblog.com/ca/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/ca/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>La part final de la sèrie Polyglot Tax tracta els problemes difícils de producció: una política de Row-Level Security unificada sobre dades relacionals, JSON, grafs i vectors, més els rastres d'auditoria xifrats i la integració MCP que fan que SQL Server 2025 sigui realment preparat per a agents.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest post ha estat traduït automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;He seguit la sèrie Polyglot Tax d&amp;rsquo;Aditya Badramraju amb molt d&amp;rsquo;interès. Les parts 1-3 van construir un cas convincent per a SQL Server 2025 com una base de dades realment multimodel — JSON, grafs, vectors i dades relacionals en un sol motor amb un planificador de consultes unificat. La part 4 tanca la sèrie amb les parts que realment determinen si confiaries en aquesta arquitectura en producció.&lt;/p&gt;
&lt;p&gt;Spoiler: la història de producció és sòlida.&lt;/p&gt;
&lt;h2 id="un-sol-model-de-seguretat-per-a-tots-els-models-de-dades"&gt;Un Sol Model de Seguretat per a Tots els Models de Dades&lt;/h2&gt;
&lt;p&gt;Això és el que passa amb els stacks poliglotes: quan un auditor pregunta &amp;ldquo;demostra que el Tenant A no pot veure les dades del Tenant B&amp;rdquo;, has de respondre aquesta pregunta per a cada base de dades de manera independent. Cinc bases de dades, cinc models de seguretat, cinc proves.&lt;/p&gt;
&lt;p&gt;Amb SQL Server 2025, defineixes una sola política de Row-Level Security i cobreix tots els models de dades:&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;A partir d&amp;rsquo;aquí, qualsevol consulta — joins relacionals, consultes de camins JSON, travessies de graf, cerques de similitud vectorial — es filtra automàticament per tenant. El motor injecta el predicat a la planificació abans que cap dada surti de l&amp;rsquo;emmagatzematge. El teu codi no necessita &lt;code&gt;WHERE TenantID = @id&lt;/code&gt; per tot arreu. Proves la política una sola vegada.&lt;/p&gt;
&lt;p&gt;Les capes es combinen encara més: Dynamic Data Masking per a les columnes que no haurien de mostrar els valors complets a certs rols, Always Encrypted per al xifrat de punta a punta (fins i tot els DBAs no el poden llegir), i els stored procedures com a frontera de permisos perquè els agents només cridin allò que has exposat explícitament.&lt;/p&gt;
&lt;p&gt;Aquesta és la part de l&amp;rsquo;arquitectura que realment importa en un SaaS amb requisits de compliment. Una política, una prova.&lt;/p&gt;
&lt;h2 id="còpia-de-seguretat-unificada--recuperació-atòmica"&gt;Còpia de Seguretat Unificada = Recuperació Atòmica&lt;/h2&gt;
&lt;p&gt;Una instrucció, tots els models de dades, un punt en el temps coherent:&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;En un stack poliglota, la recuperació point-in-time a través de cinc bases de dades significa coordinar cinc operacions de restauració i esperar que els timestamps encaixin dins d&amp;rsquo;un o dos segons. Per a dades financeres, aquesta inconsistència de dos segons és inacceptable. Amb una sola base de dades, un sol registre de transaccions i una sola restauració — la recuperació és atòmica per definició.&lt;/p&gt;
&lt;h2 id="taules-ledger-per-a-rastreig-dauditoria-a-prova-de-manipulacions"&gt;Taules Ledger per a Rastreig d&amp;rsquo;Auditoria a Prova de Manipulacions&lt;/h2&gt;
&lt;p&gt;Per a sectors regulats, necessites més que &amp;ldquo;tenim logs&amp;rdquo;. Necessites prova criptogràfica que aquells logs no han estat modificats:&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;Cada insert, update i delete queda hashat criptogràficament dins d&amp;rsquo;una estructura tipus blockchain. Pots demostrar a un auditor — matemàticament — que una fila no ha estat manipulada des que es va escriure. En un stack poliglota, aquesta capacitat no existeix de manera uniforme a totes les teves bases de dades.&lt;/p&gt;
&lt;h2 id="integració-mcp-agents-sense-middleware-fet-a-mà"&gt;Integració MCP: Agents Sense Middleware Fet a Mà&lt;/h2&gt;
&lt;p&gt;Això és cap on anava la sèrie: SQL Server 2025 dona suport directe al SQL MCP Server, cosa que significa que els teus agents poden cridar la base de dades mitjançant tool calls en llenguatge natural sense que hagis d&amp;rsquo;escriure middleware per a cada operació.&lt;/p&gt;
&lt;p&gt;Combina això amb els stored procedures com a frontera de permisos i amb Row-Level Security aplicada al motor, i tens un model on:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L&amp;rsquo;agent crida una eina, per exemple &amp;ldquo;obté el context del client per al compte 12345&amp;rdquo;&lt;/li&gt;
&lt;li&gt;MCP ho tradueix al stored procedure que has definit&lt;/li&gt;
&lt;li&gt;El motor SQL aplica l&amp;rsquo;aïllament de tenant i l&amp;rsquo;emmascarament de columnes automàticament&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;agent rep exactament les dades que té permís de veure&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No hi ha capa de middleware. No hi ha risc d&amp;rsquo;injecció de consultes ad hoc. El motor gestiona l&amp;rsquo;autorització, no l&amp;rsquo;agent.&lt;/p&gt;
&lt;h2 id="per-què-això-importa-als-desenvolupadors-net"&gt;Per Què Això Importa Als Desenvolupadors .NET&lt;/h2&gt;
&lt;p&gt;Si estàs construint serveis .NET amb SQL Server com a magatzem principal, el missatge d&amp;rsquo;aquesta sèrie és: no necessites afegir Redis per a la caché, ni una base de dades de graf per a les relacions, ni un magatzem vectorial per a les embeddings. SQL Server 2025 s&amp;rsquo;encarrega de tot això — amb una coherència operativa millor que un stack poliglota i una seguretat unificada que realment es pot auditar.&lt;/p&gt;
&lt;p&gt;La integració MCP significa que els teus agents de Semantic Kernel o els fluxos de Microsoft Agent Framework poden interactuar amb la capa de dades a través del mateix SQL MCP Server, amb les mateixes garanties de seguretat que imposaries a les consultes humanes.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;La sèrie Polyglot Tax val la pena llegir-la de cap a cap. Les parts 1-3 demostren la història del planificador de consultes. La part 4 demostra la història de producció. Per als desenvolupadors .NET que construeixen aplicacions agent-first o AI-augmented sobre Azure SQL, aquesta arquitectura mereix una consideració seriosa.&lt;/p&gt;
&lt;p&gt;Publicació original d&amp;rsquo;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>