<?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/pl/tags/sql-server/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</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/pl/tags/sql-server/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft SQL W połowie 2026: Cicha Zmiana z Silnika Bazodanowego na Platformę Danych AI</title><link>https://thedotnetblog.com/pl/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/pl/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</guid><description>Fala aktualizacji SQL 2026 pokazuje strategiczną transformację: SQL przestaje być tylko warstwą trwałości, staje się zarządzanym kręgosłupem wykonawczym dla aplikacji agentowych.</description><content:encoded>&lt;p&gt;Pierwsza połowa 2026 dla Microsoft SQL to nie tylko długa lista wydań. To sygnał kierunkowy. SQL Server, Azure SQL i SQL database w Fabric zbiegają się w postawę platformy, gdzie dane, zarządzanie i przepływy AI są zaprojektowane do współistnienia, zamiast być sklejane razem.&lt;/p&gt;
&lt;p&gt;Oryginalne źródło: &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;Na poziomie silnika, funkcje GA takie jak AI_GENERATE_EMBEDDINGS, obiekty External Model i kontrole tożsamości na poziomie serwera Entra pokazują, że „AI w przepływach bazodanowych&amp;quot; jest już mainstreamem, a nie nowością w podglądzie. Na poziomie operacyjnym, ulepszenia Hyperscale i Managed Instance, silniejsze opcje szyfrowania i regularne CU wskazują, że klasyczna dyscyplina niezawodności i bezpieczeństwa wciąż jest nienaruszona.&lt;/p&gt;
&lt;p&gt;Historia narzędziowa jest równie ważna. SSMS dostaje tryb agenta Copilot, porównywanie schematów, ulepszenia formatowania SQL i bogatszy kontekst wykonania. Rozszerzenie MSSQL w VS Code wciąż rozwija notebooki, projektowanie schematów z asystą AI, integrację DAB i przepływy provisionowania Azure. Ta dwutorowa inwestycja mówi, że Microsoft oczekuje, iż programiści pozostaną wielojęzyczni w wyborze IDE, jednocześnie standaryzując na współdzielonych możliwościach płaszczyzny danych.&lt;/p&gt;
&lt;p&gt;Moje najmocniejsze zdanie: &lt;strong&gt;SQL MCP Server jest centralnym trendem&lt;/strong&gt;. Gdy encje SQL są bezpiecznie wystawione jako interfejsy narzędziowe dla agentów, baza danych przestaje być pasywnym magazynem i staje się aktywnym uczestnikiem orkiestracji. To tworzy nową dźwignię, ale także podnosi poprzeczkę dla architektury bezpieczeństwa, propagacji tożsamości i audytowalności.&lt;/p&gt;
&lt;p&gt;Co zespoły powinny zrobić teraz?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wybierz jeden pas migracji i wykonaj go mocno.&lt;/strong&gt; Albo modernizuj swój pipeline schematów/programowania wokół SQL Projects plus CI/CD, albo skup się na zarządzaniu gotowym do MCP i kontrolach dostępu do danych. Próba wchłonięcia każdego ogłoszenia funkcji równolegle wstrzyma dostarczanie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ustanów jedną linię bazową tożsamości&lt;/strong&gt; z uwierzytelnianiem Entra tam, gdzie to możliwe. Mieszane wzorce uwierzytelniania to najszybsza ścieżka do niespójnego egzekwowania polityk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traktuj aktualizacje ekosystemu sterowników jako pracę krytyczną dla produkcji&lt;/strong&gt;, a nie szum konserwacyjny. SqlClient, ODBC, OLE DB, łączniki Python i adaptery Django wszystkie dostarczyły znaczące zmiany niezawodności i kompatybilności. Jeśli twój stos aplikacji obejmuje wiele języków, twoja niezawodność danych jest tylko tak silna, jak najmniej aktualizowany sterownik w produkcji.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To jest prawdziwy przekaz 2026 jak dotąd: Microsoft SQL staje się operacyjnym rdzeniem dla systemów agentowych. Zespoły, które modernizują z myślą o zarządzaniu, będą działać szybciej. Zespoły, które gonią za funkcjami bez dyscypliny platformowej, będą gromadzić kosztowną złożoność.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 jako baza danych gotowa na agentów: bezpieczeństwo, backup i MCP w jednym silniku</title><link>https://thedotnetblog.com/pl/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/pl/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>Końcowa część serii Polyglot Tax omawia najtrudniejsze problemy produkcyjne: ujednolicony Row-Level Security dla danych relacyjnych, JSON, graph i vector, a także kryptograficzne ślady audytu i integrację MCP, które czynią SQL Server 2025 naprawdę gotowym na agentów.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Śledziłem serię Polyglot Tax Adityi Badramraju z dużym zainteresowaniem. Części 1-3 zbudowały mocny argument za SQL Server 2025 jako naprawdę wielomodelową bazą danych — JSON, graph, vector i dane relacyjne w jednym silniku z ujednoliconym query plannerem. Część 4 zamyka serię tym, co naprawdę decyduje o tym, czy zaufałbyś tej architekturze w produkcji.&lt;/p&gt;
&lt;p&gt;Spoiler: historia produkcyjna jest solidna.&lt;/p&gt;
&lt;h2 id="jeden-model-bezpieczeństwa-dla-wszystkich-modeli-danych"&gt;Jeden Model Bezpieczeństwa dla Wszystkich Modeli Danych&lt;/h2&gt;
&lt;p&gt;To jest problem stacków poliglotycznych: gdy audytor pyta &amp;ldquo;udowodnij, że Tenant A nie widzi danych Tenant B&amp;rdquo;, musisz odpowiedzieć na to pytanie osobno dla każdej bazy danych. Pięć baz danych, pięć modeli bezpieczeństwa, pięć dowodów.&lt;/p&gt;
&lt;p&gt;W SQL Server 2025 definiujesz jedną politykę Row-Level Security i obejmuje ona wszystkie modele danych:&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;Od tego momentu każde zapytanie — relacyjne joiny, zapytania po ścieżkach JSON, traversale graph, wyszukiwanie podobieństwa vector — jest automatycznie filtrowane po tenant. Silnik wstrzykuje predykat do planu wykonania, zanim jakiekolwiek dane opuszczą storage. Twój kod wywołujący nie musi wszędzie pisać &lt;code&gt;WHERE TenantID = @id&lt;/code&gt;. Testujesz politykę raz.&lt;/p&gt;
&lt;p&gt;Warstwy nakładają się dalej: Dynamic Data Masking dla kolumn, które nie powinny pokazywać pełnych wartości niektórym rolom, Always Encrypted dla szyfrowania end-to-end (nawet DBA nie mogą tego odczytać) oraz stored procedures jako granica uprawnień, aby agenci wywoływali tylko to, co jawnie udostępniłeś.&lt;/p&gt;
&lt;p&gt;To jest część architektury, która ma największe znaczenie dla SaaS z dużymi wymaganiami compliance. Jedna polityka, jeden dowód.&lt;/p&gt;
&lt;h2 id="ujednolicony-backup--atomowe-odzyskiwanie"&gt;Ujednolicony Backup = Atomowe Odzyskiwanie&lt;/h2&gt;
&lt;p&gt;Jedna instrukcja, wszystkie modele danych, spójny punkt w czasie:&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;W stacku poliglotycznym odzyskiwanie point-in-time dla pięciu baz danych oznacza koordynację pięciu operacji restore i nadzieję, że znaczniki czasu zbiegną się w ciągu jednej lub dwóch sekund. Dla danych finansowych taka dwusekundowa niespójność jest nie do zaakceptowania. Z jedną bazą danych, jednym logiem transakcji i jednym restore — odzyskiwanie jest atomowe z definicji.&lt;/p&gt;
&lt;h2 id="tabele-ledger-dla-ścieżek-audytu-odpornych-na-manipulacje"&gt;Tabele Ledger dla Ścieżek Audytu Odpornych na Manipulacje&lt;/h2&gt;
&lt;p&gt;W branżach regulowanych potrzebujesz czegoś więcej niż &amp;ldquo;mamy logi&amp;rdquo;. Potrzebujesz kryptograficznego dowodu, że te logi nie zostały zmienione:&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;Każdy insert, update i delete jest kryptograficznie hashowany w strukturze podobnej do blockchaina. Możesz matematycznie udowodnić audytorowi, że wiersz nie był manipulowany od momentu zapisania. W stacku poliglotycznym taka możliwość nie istnieje w sposób jednolity we wszystkich twoich bazach danych.&lt;/p&gt;
&lt;h2 id="integracja-mcp-agenci-bez-ręcznie-pisanej-warstwy-middleware"&gt;Integracja MCP: Agenci Bez Ręcznie Pisanej Warstwy Middleware&lt;/h2&gt;
&lt;p&gt;Seria prowadziła właśnie do tego: SQL Server 2025 wspiera SQL MCP Server bezpośrednio, co oznacza, że twoi agenci mogą wywoływać bazę danych przez natural language tool calls bez pisania middleware dla każdej operacji.&lt;/p&gt;
&lt;p&gt;Połącz to ze stored procedures jako granicą uprawnień i Row-Level Security wymuszanym na poziomie silnika, a otrzymasz model, w którym:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agent wywołuje narzędzie, na przykład &amp;ldquo;pobierz kontekst klienta dla konta 12345&amp;rdquo;&lt;/li&gt;
&lt;li&gt;MCP tłumaczy to na zdefiniowaną przez ciebie stored procedure&lt;/li&gt;
&lt;li&gt;Silnik SQL automatycznie wymusza izolację tenant i maskowanie kolumn&lt;/li&gt;
&lt;li&gt;Agent dostaje dokładnie te dane, które może zobaczyć&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nie ma warstwy middleware. Nie ma ryzyka ad-hoc query injection. Autoryzację obsługuje silnik, nie agent.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ma-znaczenie-dla-programistów-net"&gt;Dlaczego To Ma Znaczenie dla Programistów .NET&lt;/h2&gt;
&lt;p&gt;Jeśli budujesz usługi .NET, a SQL Server jest twoim podstawowym magazynem danych, przekaz tej serii jest prosty: nie musisz dodawać Redis do cache, graph database do relacji ani vector store do embeddings. SQL Server 2025 obsługuje to wszystko — z lepszą spójnością operacyjną niż stack poliglotyczny i z ujednoliconym bezpieczeństwem, które naprawdę da się audytować.&lt;/p&gt;
&lt;p&gt;Integracja MCP oznacza, że twoi agenci Semantic Kernel lub workflow Microsoft Agent Framework mogą komunikować się z warstwą danych przez ten sam SQL MCP Server, z takimi samymi gwarancjami bezpieczeństwa, jakie zastosowałbyś do zapytań ludzi.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Serię Polyglot Tax warto przeczytać od początku do końca. Części 1-3 dowodzą historii query planner. Część 4 dowodzi historii produkcyjnej. Dla programistów .NET budujących aplikacje agent-first lub AI-augmented na Azure SQL, ta architektura zasługuje na poważne rozważenie.&lt;/p&gt;
&lt;p&gt;Oryginalny post autorstwa Adityi 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>