CINXE.COM
Brian Spendolini, Author at Azure SQL Devs’ Corner
<!DOCTYPE html> <html lang="en-US" theme="light"> <head> <meta charset="UTF-8"> <script> // Initialize theme from localStorage or system preference let theme = localStorage.getItem('theme') || (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); document.documentElement.setAttribute('theme', theme); const metaTag = document.createElement('meta'); metaTag.setAttribute('name', 'awa-ver'); metaTag.content = theme; document.head.appendChild(metaTag); isDarkTheme = theme === 'dark'; </script> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="awa-pageType" content="author" /> <meta name="awa-product" content="Azure SQL Devs’ Corner" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Brian Spendolini, Author at Azure SQL Devs’ Corner</title> <meta name="mobile-web-app-capable" content="yes"> <meta name="color-scheme" content="dark light"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-title" content="Azure SQL Devs’ Corner - Voices from the Azure SQL PM Team, focusing on development and developers"> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="https://devblogs.microsoft.com/azure-sql/xmlrpc.php"> <!-- [Begin] JSLL SHIM (1DS) domain prefetch --> <link rel="preconnect" href="//js.monitor.azure.com" crossorigin> <link rel="preconnect" href="//browser.events.data.microsoft.com" crossorigin> <!-- [END] JSLL SHIM (1DS) domain prefetch --> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.8) - https://yoast.com/wordpress/plugins/seo/ --> <link rel="canonical" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/" /> <link rel="next" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/page/2/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="profile" /> <meta property="og:title" content="Brian Spendolini" /> <meta property="og:url" content="https://devblogs.microsoft.com/azure-sql/author/bspendolini/" /> <meta property="og:site_name" content="Azure SQL Devs’ Corner" /> <meta property="og:image" content="https://secure.gravatar.com/avatar/6a111504a84aec40960971b76353d5b9?s=500&d=mm&r=g" /> <meta name="twitter:card" content="summary_large_image" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"ProfilePage","@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/","url":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/","name":"Brian Spendolini, Author at Azure SQL Devs’ Corner","isPartOf":{"@id":"https://devblogs.microsoft.com/azure-sql/#website"},"primaryImageOfPage":{"@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/#primaryimage"},"image":{"@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/#primaryimage"},"thumbnailUrl":"https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2024/04/sql-managed-instance.jpeg","breadcrumb":{"@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://devblogs.microsoft.com/azure-sql/author/bspendolini/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/#primaryimage","url":"https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2024/04/sql-managed-instance.jpeg","contentUrl":"https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2024/04/sql-managed-instance.jpeg","width":817,"height":677,"caption":"Image sql managed instance"},{"@type":"BreadcrumbList","@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://devblogs.microsoft.com/azure-sql/"},{"@type":"ListItem","position":2,"name":"Archives for Brian Spendolini"}]},{"@type":"WebSite","@id":"https://devblogs.microsoft.com/azure-sql/#website","url":"https://devblogs.microsoft.com/azure-sql/","name":"Azure SQL Devs’ Corner","description":"Voices from the Azure SQL PM Team, focusing on development and developers","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://devblogs.microsoft.com/azure-sql/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https://devblogs.microsoft.com/azure-sql/#/schema/person/e1a3db525589f4e96a65e0c785ad3788","name":"Brian Spendolini","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://devblogs.microsoft.com/azure-sql/#/schema/person/image/","url":"https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2022/07/download-96x96.png","contentUrl":"https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2022/07/download-96x96.png","caption":"Brian Spendolini"},"sameAs":["https://x.com/https://www.twitter.com/btspendo"],"mainEntityOfPage":{"@id":"https://devblogs.microsoft.com/azure-sql/author/bspendolini/"}}]}</script> <!-- / Yoast SEO Premium plugin. --> <link rel="alternate" type="application/rss+xml" title="Azure SQL Devs’ Corner » Posts by Brian Spendolini Feed" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-includes\/js\/wp-emoji-release.min.js"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://devblogs.microsoft.com/azure-sql/wp-includes/css/dist/block-library/style.min.css' type='text/css' media='all' /> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <link rel='stylesheet' id='mpp_gutenberg-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/metronet-profile-picture/dist/blocks.style.build.css?ver=2.6.3' type='text/css' media='all' /> <link rel='stylesheet' id='devblogs-evo-styles-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/css/theme.min.css?ver=1.2.0.1732556449' type='text/css' media='all' /> <link rel='stylesheet' id='newsletter-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/newsletter/style.css?ver=8.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='fabric-icons-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/fabric-icon-manager/assets/css/fabric-icons.css?ver=1699358813' type='text/css' media='all' /> <link rel='stylesheet' id='wp-featherlight-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/wp-featherlight/css/wp-featherlight.min.css?ver=1.3.4' type='text/css' media='all' /> <link rel='stylesheet' id='block-custom-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/devblogs-blocks/assets/block-custom.css' type='text/css' media='all' /> <link rel='stylesheet' id='highlight-css-css' href='https://devblogs.microsoft.com/azure-sql/wp-content/plugins/devblogs-blocks/assets/highlight.css' type='text/css' media='all' /> <script type="text/javascript"> window._nslDOMReady = function (callback) { if ( document.readyState === "complete" || document.readyState === "interactive" ) { callback(); } else { document.addEventListener( "DOMContentLoaded", callback ); } }; </script><script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/back-to-top.min.js?ver=1725380830" id="back-to-top-script-js"></script> <link rel="https://api.w.org/" href="https://devblogs.microsoft.com/azure-sql/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://devblogs.microsoft.com/azure-sql/wp-json/wp/v2/users/95874" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://devblogs.microsoft.com/azure-sql/xmlrpc.php?rsd" /> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1; t.src="https://www.clarity.ms/tag/"+i+"?ref=wordpress";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "ntjux94l1c"); </script> <style>#respond h3#reply-title{display:none;}</style><link rel="preload" as="style" href="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/code-prettify/prettify/prettify.css" /><link rel="icon" href="https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2021/03/Microsoft-Favicon.png" sizes="32x32" /> <link rel="icon" href="https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2021/03/Microsoft-Favicon.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2021/03/Microsoft-Favicon.png" /> <meta name="msapplication-TileImage" content="https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2021/03/Microsoft-Favicon.png" /> <style type="text/css">div.nsl-container[data-align="left"] { text-align: left; } div.nsl-container[data-align="center"] { text-align: center; } div.nsl-container[data-align="right"] { text-align: right; } div.nsl-container div.nsl-container-buttons a[data-plugin="nsl"] { text-decoration: none; box-shadow: none; border: 0; } div.nsl-container .nsl-container-buttons { display: flex; padding: 5px 0; } div.nsl-container.nsl-container-block .nsl-container-buttons { display: inline-grid; grid-template-columns: minmax(145px, auto); } div.nsl-container-block-fullwidth .nsl-container-buttons { flex-flow: column; align-items: center; } div.nsl-container-block-fullwidth .nsl-container-buttons a, div.nsl-container-block .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px 0; width: 100%; } div.nsl-container-inline { margin: -5px; text-align: left; } div.nsl-container-inline .nsl-container-buttons { justify-content: center; flex-wrap: wrap; } div.nsl-container-inline .nsl-container-buttons a { margin: 5px; display: inline-block; } div.nsl-container-grid .nsl-container-buttons { flex-flow: row; align-items: center; flex-wrap: wrap; } div.nsl-container-grid .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px; max-width: 280px; width: 100%; } @media only screen and (min-width: 650px) { div.nsl-container-grid .nsl-container-buttons a { width: auto; } } div.nsl-container .nsl-button { cursor: pointer; vertical-align: top; border-radius: 4px; } div.nsl-container .nsl-button-default { color: #fff; display: flex; } div.nsl-container .nsl-button-icon { display: inline-block; } div.nsl-container .nsl-button-svg-container { flex: 0 0 auto; padding: 8px; display: flex; align-items: center; } div.nsl-container svg { height: 24px; width: 24px; vertical-align: top; } div.nsl-container .nsl-button-default div.nsl-button-label-container { margin: 0 24px 0 12px; padding: 10px 0; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px; letter-spacing: .25px; overflow: hidden; text-align: center; text-overflow: clip; white-space: nowrap; flex: 1 1 auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-transform: none; display: inline-block; } div.nsl-container .nsl-button-google[data-skin="dark"] .nsl-button-svg-container { margin: 1px; padding: 7px; border-radius: 3px; background: #fff; } div.nsl-container .nsl-button-google[data-skin="light"] { border-radius: 1px; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .25); color: RGBA(0, 0, 0, 0.54); } div.nsl-container .nsl-button-apple .nsl-button-svg-container { padding: 0 6px; } div.nsl-container .nsl-button-apple .nsl-button-svg-container svg { height: 40px; width: auto; } div.nsl-container .nsl-button-apple[data-skin="light"] { color: #000; box-shadow: 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="white"] { color: #000; box-shadow: inset 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="light"] { color: #1877F2; box-shadow: inset 0 0 0 1px #1877F2; } div.nsl-container .nsl-button-spotify[data-skin="white"] { color: #191414; box-shadow: inset 0 0 0 1px #191414; } div.nsl-container .nsl-button-apple div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack[data-skin="light"] { color: #000000; box-shadow: inset 0 0 0 1px #DDDDDD; } div.nsl-container .nsl-button-tiktok[data-skin="light"] { color: #161823; box-shadow: 0 0 0 1px rgba(22, 24, 35, 0.12); } div.nsl-container .nsl-button-kakao { color: rgba(0, 0, 0, 0.85); } .nsl-clear { clear: both; } .nsl-container { clear: both; } .nsl-disabled-provider .nsl-button { filter: grayscale(1); opacity: 0.8; } /*Button align start*/ div.nsl-container-inline[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-inline[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-inline[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-grid[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-grid[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="space-around"] .nsl-container-buttons { justify-content: space-around; } div.nsl-container-grid[data-align="space-between"] .nsl-container-buttons { justify-content: space-between; } /* Button align end*/ /* Redirect */ #nsl-redirect-overlay { display: flex; flex-direction: column; justify-content: center; align-items: center; position: fixed; z-index: 1000000; left: 0; top: 0; width: 100%; height: 100%; backdrop-filter: blur(1px); background-color: RGBA(0, 0, 0, .32);; } #nsl-redirect-overlay-container { display: flex; flex-direction: column; justify-content: center; align-items: center; background-color: white; padding: 30px; border-radius: 10px; } #nsl-redirect-overlay-spinner { content: ''; display: block; margin: 20px; border: 9px solid RGBA(0, 0, 0, .6); border-top: 9px solid #fff; border-radius: 50%; box-shadow: inset 0 0 0 1px RGBA(0, 0, 0, .6), 0 0 0 1px RGBA(0, 0, 0, .6); width: 40px; height: 40px; animation: nsl-loader-spin 2s linear infinite; } @keyframes nsl-loader-spin { 0% { transform: rotate(0deg) } to { transform: rotate(360deg) } } #nsl-redirect-overlay-title { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 18px; font-weight: bold; color: #3C434A; } #nsl-redirect-overlay-text { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; text-align: center; font-size: 14px; color: #3C434A; } /* Redirect END*/</style><style type="text/css">/* Notice fallback */ #nsl-notices-fallback { position: fixed; right: 10px; top: 10px; z-index: 10000; } .admin-bar #nsl-notices-fallback { top: 42px; } #nsl-notices-fallback > div { position: relative; background: #fff; border-left: 4px solid #fff; box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); margin: 5px 15px 2px; padding: 1px 20px; } #nsl-notices-fallback > div.error { display: block; border-left-color: #dc3232; } #nsl-notices-fallback > div.updated { display: block; border-left-color: #46b450; } #nsl-notices-fallback p { margin: .5em 0; padding: 2px; } #nsl-notices-fallback > div:after { position: absolute; right: 5px; top: 5px; content: '\00d7'; display: block; height: 16px; width: 16px; line-height: 16px; text-align: center; font-size: 20px; cursor: pointer; }</style> <!-- Start JSLL SHIM(1DS) Tags --> <script src="https://js.monitor.azure.com/scripts/c/ms.jsll-3.min.js" type="text/javascript"></script> <script type="text/javascript"> var config = { useDefaultContentName: true, useShortNameForContentBlob: false, autoCapture: { pageView: true, onLoad: true, onUnload: true, lineage: true, click: true, scroll: true, resize: false, lineage: true, jsError: true, addin: true, perf: true }, urlCollectHash: true, urlCollectQuery: true, instrumentationKey: "31b03416b80d4fec81330cf396b8bf63-2db31b2d-ee29-4371-af87-871cba555f5a-7031", coreData: { appId: "MSDevBlogs", }, // Initially set the GPC_DataSharingOptIn flag property in 1DS (One Data Source) to false advancedConfig: { propertyConfiguration: { gpcDataSharingOptIn: false } }, callback: { pageName: function () { return document.title }, contentUpdatePageTags: function () { return { metaTags: { 'ver': theme }, } }, pageActionContentTags: function () { return { metaTags: { 'ver': theme }, } }, pageActionPageTags: function () { return { "pageType": "author", metaTags: { 'ver': theme }, } }, pageViewPageTags: function () { return { "pageType": "author", } }, } }; awa.init(config); </script> <!-- END JSLL SHIM(1DS) Integration --> <script> /*! lazysizes - v4.1.3 | For lazy loading images */ !function (a, b) { var c = b(a, a.document); a.lazySizes = c, "object" == typeof module && module.exports && (module.exports = c) }(window, function (a, b) { "use strict"; if (b.getElementsByClassName) { var c, d, e = b.documentElement, f = a.Date, g = a.HTMLPictureElement, h = "addEventListener", i = "getAttribute", j = a[h], k = a.setTimeout, l = a.requestAnimationFrame || k, m = a.requestIdleCallback, n = /^picture$/i, o = ["load", "error", "lazyincluded", "_lazyloaded"], p = {}, q = Array.prototype.forEach, r = function (a, b) { return p[b] || (p[b] = new RegExp("(\\s|^)" + b + "(\\s|$)")), p[b].test(a[i]("class") || "") && p[b] }, s = function (a, b) { r(a, b) || a.setAttribute("class", (a[i]("class") || "").trim() + " " + b) }, t = function (a, b) { var c; (c = r(a, b)) && a.setAttribute("class", (a[i]("class") || "").replace(c, " ")) }, u = function (a, b, c) { var d = c ? h : "removeEventListener"; c && u(a, b), o.forEach(function (c) { a[d](c, b) }) }, v = function (a, d, e, f, g) { var h = b.createEvent("Event"); return e || (e = {}), e.instance = c, h.initEvent(d, !f, !g), h.detail = e, a.dispatchEvent(h), h }, w = function (b, c) { var e; !g && (e = a.picturefill || d.pf) ? (c && c.src && !b[i]("srcset") && b.setAttribute("srcset", c.src), e({ reevaluate: !0, elements: [b] })) : c && c.src && (b.src = c.src) }, x = function (a, b) { return (getComputedStyle(a, null) || {})[b] }, y = function (a, b, c) { for (c = c || a.offsetWidth; c < d.minSize && b && !a._lazysizesWidth;)c = b.offsetWidth, b = b.parentNode; return c }, z = function () { var a, c, d = [], e = [], f = d, g = function () { var b = f; for (f = d.length ? e : d, a = !0, c = !1; b.length;)b.shift()(); a = !1 }, h = function (d, e) { a && !e ? d.apply(this, arguments) : (f.push(d), c || (c = !0, (b.hidden ? k : l)(g))) }; return h._lsFlush = g, h }(), A = function (a, b) { return b ? function () { z(a) } : function () { var b = this, c = arguments; z(function () { a.apply(b, c) }) } }, B = function (a) { var b, c = 0, e = d.throttleDelay, g = d.ricTimeout, h = function () { b = !1, c = f.now(), a() }, i = m && g > 49 ? function () { m(h, { timeout: g }), g !== d.ricTimeout && (g = d.ricTimeout) } : A(function () { k(h) }, !0); return function (a) { var d; (a = a === !0) && (g = 33), b || (b = !0, d = e - (f.now() - c), 0 > d && (d = 0), a || 9 > d ? i() : k(i, d)) } }, C = function (a) { var b, c, d = 99, e = function () { b = null, a() }, g = function () { var a = f.now() - c; d > a ? k(g, d - a) : (m || e)(e) }; return function () { c = f.now(), b || (b = k(g, d)) } }; !function () { var b, c = { lazyClass: "lazyload", loadedClass: "lazyloaded", loadingClass: "lazyloading", preloadClass: "lazypreload", errorClass: "lazyerror", autosizesClass: "lazyautosizes", srcAttr: "data-src", srcsetAttr: "data-srcset", sizesAttr: "data-sizes", minSize: 40, customMedia: {}, init: !0, expFactor: 1.5, hFac: .8, loadMode: 2, loadHidden: !0, ricTimeout: 0, throttleDelay: 125 }; d = a.lazySizesConfig || a.lazysizesConfig || {}; for (b in c) b in d || (d[b] = c[b]); a.lazySizesConfig = d, k(function () { d.init && F() }) }(); var D = function () { var g, l, m, o, p, y, D, F, G, H, I, J, K, L, M = /^img$/i, N = /^iframe$/i, O = "onscroll" in a && !/(gle|ing)bot/.test(navigator.userAgent), P = 0, Q = 0, R = 0, S = -1, T = function (a) { R--, a && a.target && u(a.target, T), (!a || 0 > R || !a.target) && (R = 0) }, U = function (a, c) { var d, f = a, g = "hidden" == x(b.body, "visibility") || "hidden" != x(a.parentNode, "visibility") && "hidden" != x(a, "visibility"); for (F -= c, I += c, G -= c, H += c; g && (f = f.offsetParent) && f != b.body && f != e;)g = (x(f, "opacity") || 1) > 0, g && "visible" != x(f, "overflow") && (d = f.getBoundingClientRect(), g = H > d.left && G < d.right && I > d.top - 1 && F < d.bottom + 1); return g }, V = function () { var a, f, h, j, k, m, n, p, q, r = c.elements; if ((o = d.loadMode) && 8 > R && (a = r.length)) { f = 0, S++, null == K && ("expand" in d || (d.expand = e.clientHeight > 500 && e.clientWidth > 500 ? 500 : 370), J = d.expand, K = J * d.expFactor), K > Q && 1 > R && S > 2 && o > 2 && !b.hidden ? (Q = K, S = 0) : Q = o > 1 && S > 1 && 6 > R ? J : P; for (; a > f; f++)if (r[f] && !r[f]._lazyRace) if (O) if ((p = r[f][i]("data-expand")) && (m = 1 * p) || (m = Q), q !== m && (y = innerWidth + m * L, D = innerHeight + m, n = -1 * m, q = m), h = r[f].getBoundingClientRect(), (I = h.bottom) >= n && (F = h.top) <= D && (H = h.right) >= n * L && (G = h.left) <= y && (I || H || G || F) && (d.loadHidden || "hidden" != x(r[f], "visibility")) && (l && 3 > R && !p && (3 > o || 4 > S) || U(r[f], m))) { if (ba(r[f]), k = !0, R > 9) break } else !k && l && !j && 4 > R && 4 > S && o > 2 && (g[0] || d.preloadAfterLoad) && (g[0] || !p && (I || H || G || F || "auto" != r[f][i](d.sizesAttr))) && (j = g[0] || r[f]); else ba(r[f]); j && !k && ba(j) } }, W = B(V), X = function (a) { s(a.target, d.loadedClass), t(a.target, d.loadingClass), u(a.target, Z), v(a.target, "lazyloaded") }, Y = A(X), Z = function (a) { Y({ target: a.target }) }, $ = function (a, b) { try { a.contentWindow.location.replace(b) } catch (c) { a.src = b } }, _ = function (a) { var b, c = a[i](d.srcsetAttr); (b = d.customMedia[a[i]("data-media") || a[i]("media")]) && a.setAttribute("media", b), c && a.setAttribute("srcset", c) }, aa = A(function (a, b, c, e, f) { var g, h, j, l, o, p; (o = v(a, "lazybeforeunveil", b)).defaultPrevented || (e && (c ? s(a, d.autosizesClass) : a.setAttribute("sizes", e)), h = a[i](d.srcsetAttr), g = a[i](d.srcAttr), f && (j = a.parentNode, l = j && n.test(j.nodeName || "")), p = b.firesLoad || "src" in a && (h || g || l), o = { target: a }, p && (u(a, T, !0), clearTimeout(m), m = k(T, 2500), s(a, d.loadingClass), u(a, Z, !0)), l && q.call(j.getElementsByTagName("source"), _), h ? a.setAttribute("srcset", h) : g && !l && (N.test(a.nodeName) ? $(a, g) : a.src = g), f && (h || l) && w(a, { src: g })), a._lazyRace && delete a._lazyRace, t(a, d.lazyClass), z(function () { (!p || a.complete && a.naturalWidth > 1) && (p ? T(o) : R--, X(o)) }, !0) }), ba = function (a) { var b, c = M.test(a.nodeName), e = c && (a[i](d.sizesAttr) || a[i]("sizes")), f = "auto" == e; (!f && l || !c || !a[i]("src") && !a.srcset || a.complete || r(a, d.errorClass) || !r(a, d.lazyClass)) && (b = v(a, "lazyunveilread").detail, f && E.updateElem(a, !0, a.offsetWidth), a._lazyRace = !0, R++, aa(a, b, f, e, c)) }, ca = function () { if (!l) { if (f.now() - p < 999) return void k(ca, 999); var a = C(function () { d.loadMode = 3, W() }); l = !0, d.loadMode = 3, W(), j("scroll", function () { 3 == d.loadMode && (d.loadMode = 2), a() }, !0) } }; return { _: function () { p = f.now(), c.elements = b.getElementsByClassName(d.lazyClass), g = b.getElementsByClassName(d.lazyClass + " " + d.preloadClass), L = d.hFac, j("scroll", W, !0), j("resize", W, !0), a.MutationObserver ? new MutationObserver(W).observe(e, { childList: !0, subtree: !0, attributes: !0 }) : (e[h]("DOMNodeInserted", W, !0), e[h]("DOMAttrModified", W, !0), setInterval(W, 999)), j("hashchange", W, !0), ["focus", "mouseover", "click", "load", "transitionend", "animationend", "webkitAnimationEnd"].forEach(function (a) { b[h](a, W, !0) }), /d$|^c/.test(b.readyState) ? ca() : (j("load", ca), b[h]("DOMContentLoaded", W), k(ca, 2e4)), c.elements.length ? (V(), z._lsFlush()) : W() }, checkElems: W, unveil: ba } }(), E = function () { var a, c = A(function (a, b, c, d) { var e, f, g; if (a._lazysizesWidth = d, d += "px", a.setAttribute("sizes", d), n.test(b.nodeName || "")) for (e = b.getElementsByTagName("source"), f = 0, g = e.length; g > f; f++)e[f].setAttribute("sizes", d); c.detail.dataAttr || w(a, c.detail) }), e = function (a, b, d) { var e, f = a.parentNode; f && (d = y(a, f, d), e = v(a, "lazybeforesizes", { width: d, dataAttr: !!b }), e.defaultPrevented || (d = e.detail.width, d && d !== a._lazysizesWidth && c(a, f, e, d))) }, f = function () { var b, c = a.length; if (c) for (b = 0; c > b; b++)e(a[b]) }, g = C(f); return { _: function () { a = b.getElementsByClassName(d.autosizesClass), j("resize", g) }, checkElems: g, updateElem: e } }(), F = function () { F.i || (F.i = !0, E._(), D._()) }; return c = { cfg: d, autoSizer: E, loader: D, init: F, uP: w, aC: s, rC: t, hC: r, fire: v, gW: y, rAF: z } } }); </script> </head> <body class="archive author author-bspendolini author-95874 wp-featherlight-captions"> <!-- Star cookies banner --> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <div id="cookie-banner"></div> <script> let userConsentDetailsCallback = function () { return siteConsent ? siteConsent.getConsent() : null }; awa.sku.config.extensionConfig.SystemPropertiesCollector.callback.userConsentDetails = userConsentDetailsCallback awa.sku.config.extensionConfig.SystemPropertiesCollector.userConsented = false; var is_post = ''; function changeAnalyticsCookies() { //have Analytics consent if (siteConsent.getConsentFor(WcpConsent.consentCategories.Analytics)) { //set consent var date = new Date(); date.setTime(date.getTime() + (180 * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); if (window.clarity) { window.clarity('consent'); } } else if (siteConsent.isConsentRequired === false) { // Consent is not required if (window.clarity) { window.clarity('consent'); } } else { document.cookie = name + '=_gat; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=_gid; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=_ga; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=simaCookie; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; } } window.WcpConsent && WcpConsent.init("en-US", "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent } else { //console.log("Error initializing WcpConsent: "+ err); } }, onConsentChanged, WcpConsent.themes.light); changeAnalyticsCookies(); function onConsentChanged(categoryPreferences) { changeAnalyticsCookies(); } </script> <!-- end cookies banner --> <!-- UHF header --> <div id="headerArea" class="uhf" data-m='{"cN":"headerArea","cT":"Area_coreuiArea","id":"a1Body","sN":1,"aN":"Body"}'> <div id="headerRegion" data-region-key="headerregion" data-m='{"cN":"headerRegion","cT":"Region_coreui-region","id":"r1a1","sN":1,"aN":"a1"}' > <div id="headerUniversalHeader" data-m='{"cN":"headerUniversalHeader","cT":"Module_coreui-universalheader","id":"m1r1a1","sN":1,"aN":"r1a1"}' data-module-id="Category|headerRegion|coreui-region|headerUniversalHeader|coreui-universalheader"> <div data-m='{"cN":"cookiebanner_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}'> <div id="uhfCookieAlert" data-locale="en-us"> <div id="msccBannerV2"></div> </div> </div> <a id="uhfSkipToMain" class="m-skip-to-main" href="javascript:void(0)" data-href="#mainContent" tabindex="0" data-m='{"cN":"Skip to content_nonnav","id":"nn2m1r1a1","sN":2,"aN":"m1r1a1"}'>Skip to main content</a> <header class="c-uhfh context-uhf no-js c-sgl-stck c-category-header " itemscope="itemscope" data-header-footprint="/DEV_Blogs/DEV_header-landing, fromService: True" data-magict="true" itemtype="http://schema.org/Organization"> <div class="theme-light js-global-head f-closed global-head-cont" data-m='{"cN":"Universal Header_cont","cT":"Container","id":"c3m1r1a1","sN":3,"aN":"m1r1a1"}'> <div class="c-uhfh-gcontainer-st"> <button type="button" class="c-action-trigger c-glyph glyph-global-nav-button" aria-label="All Microsoft expand to see list of Microsoft products and services" initialState-label="All Microsoft expand to see list of Microsoft products and services" toggleState-label="Close All Microsoft list" aria-expanded="false" data-m='{"cN":"Mobile menu button_nonnav","id":"nn1c3m1r1a1","sN":1,"aN":"c3m1r1a1"}'></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy c-close-search" aria-label="Close search" aria-expanded="false" data-m='{"cN":"Close Search_nonnav","id":"nn2c3m1r1a1","sN":2,"aN":"c3m1r1a1"}'></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://www.microsoft.com" aria-label="Microsoft" data-m='{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c3m1r1a1","sN":3,"aN":"c3m1r1a1"}'> <img alt="" itemprop="logo" class="c-image" src="https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31" role="presentation" aria-hidden="true" /> <span itemprop="name" role="presentation" aria-hidden="true">Microsoft</span> </a> <div class="f-mobile-title"> <button type="button" class="c-action-trigger c-glyph glyph-chevron-left" aria-label="See more menu options" data-m='{"cN":"Mobile back button_nonnav","id":"nn4c3m1r1a1","sN":4,"aN":"c3m1r1a1"}'></button> <span data-global-title="Microsoft home" class="js-mobile-title">Dev Blogs</span> <button type="button" class="c-action-trigger c-glyph glyph-chevron-right" aria-label="See more menu options" data-m='{"cN":"Mobile forward button_nonnav","id":"nn5c3m1r1a1","sN":5,"aN":"c3m1r1a1"}'></button> </div> <div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="/" aria-label="Dev Blogs" itemprop="url" data-m='{"cN":"CatNav_Dev Blogs_nav","id":"n6c3m1r1a1","sN":6,"aN":"c3m1r1a1"}'> <span>Dev Blogs</span> </a> </div> <div class="cat-logo-button-cont x-hidden"> <button type="button" id="uhfCatLogoButton" class="c-cat-logo-button x-hidden" aria-expanded="false" aria-label="Dev Blogs" data-m='{"cN":"Dev Blogs_nonnav","id":"nn7c3m1r1a1","sN":7,"aN":"c3m1r1a1"}'> Dev Blogs </button> </div> <nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m='{"cN":"Category nav_cont","cT":"Container","id":"c8c3m1r1a1","sN":8,"aN":"c3m1r1a1"}'> <ul class="js-paddle-items"> <li class="single-link js-nav-menu x-hidden-none-mobile-vp uhf-menu-item"> <a class="c-uhf-nav-link" href="/" data-m='{"cN":"CatNav_Home_nav","id":"n1c8c3m1r1a1","sN":1,"aN":"c8c3m1r1a1"}' > Home </a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Developer" aria-expanded="false" data-m='{"cN":"CatNav_Developer_nonnav","id":"nn2c8c3m1r1a1","sN":2,"aN":"c8c3m1r1a1"}'>Developer</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Developer_cont","cT":"Container","id":"c3c8c3m1r1a1","sN":3,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft for Developers_cont","cT":"Container","id":"c1c3c8c3m1r1a1","sN":1,"aN":"c3c8c3m1r1a1"}'> <a id="microsoft-for-developers" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/blog" data-m='{"cN":"CatNav_Microsoft for Developers_nav","id":"n1c1c3c8c3m1r1a1","sN":1,"aN":"c1c3c8c3m1r1a1"}'>Microsoft for Developers</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio_cont","cT":"Container","id":"c2c3c8c3m1r1a1","sN":2,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Visual Studio_nav","id":"n1c2c3c8c3m1r1a1","sN":1,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio Code_cont","cT":"Container","id":"c3c3c8c3m1r1a1","sN":3,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio-code" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/vscode-blog" data-m='{"cN":"CatNav_Visual Studio Code_nav","id":"n1c3c3c8c3m1r1a1","sN":1,"aN":"c3c3c8c3m1r1a1"}'>Visual Studio Code</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Develop from the cloud_cont","cT":"Container","id":"c4c3c8c3m1r1a1","sN":4,"aN":"c3c8c3m1r1a1"}'> <a id="c-shellmenu_5" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/develop-from-the-cloud/" data-m='{"cN":"CatNav_Develop from the cloud_nav","id":"n1c4c3c8c3m1r1a1","sN":1,"aN":"c4c3c8c3m1r1a1"}'>Develop from the cloud</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio for Mac_cont","cT":"Container","id":"c5c3c8c3m1r1a1","sN":5,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio-for-mac" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/tag/visual-studio-for-mac/" data-m='{"cN":"CatNav_Visual Studio for Mac_nav","id":"n1c5c3c8c3m1r1a1","sN":1,"aN":"c5c3c8c3m1r1a1"}'>Visual Studio for Mac</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"All things Azure_cont","cT":"Container","id":"c6c3c8c3m1r1a1","sN":6,"aN":"c3c8c3m1r1a1"}'> <a id="all-things-azure-1" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/all-things-azure/" data-m='{"cN":"CatNav_All things Azure_nav","id":"n1c6c3c8c3m1r1a1","sN":1,"aN":"c6c3c8c3m1r1a1"}'>All things Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"DevOps_cont","cT":"Container","id":"c7c3c8c3m1r1a1","sN":7,"aN":"c3c8c3m1r1a1"}'> <a id="devops" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/devops/" data-m='{"cN":"CatNav_DevOps_nav","id":"n1c7c3c8c3m1r1a1","sN":1,"aN":"c7c3c8c3m1r1a1"}'>DevOps</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows Developer_cont","cT":"Container","id":"c8c3c8c3m1r1a1","sN":8,"aN":"c3c8c3m1r1a1"}'> <a id="windows-developer" class="js-subm-uhf-nav-link" href="https://blogs.windows.com/windowsdeveloper/" data-m='{"cN":"CatNav_Windows Developer_nav","id":"n1c8c3c8c3m1r1a1","sN":1,"aN":"c8c3c8c3m1r1a1"}'>Windows Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Developer support_cont","cT":"Container","id":"c9c3c8c3m1r1a1","sN":9,"aN":"c3c8c3m1r1a1"}'> <a id="developer-support" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/premier-developer/" data-m='{"cN":"CatNav_Developer support_nav","id":"n1c9c3c8c3m1r1a1","sN":1,"aN":"c9c3c8c3m1r1a1"}'>Developer support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"ISE Developer_cont","cT":"Container","id":"c10c3c8c3m1r1a1","sN":10,"aN":"c3c8c3m1r1a1"}'> <a id="ise-developer" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ise/" data-m='{"cN":"CatNav_ISE Developer_nav","id":"n1c10c3c8c3m1r1a1","sN":1,"aN":"c10c3c8c3m1r1a1"}'>ISE Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Engineering@Microsoft_cont","cT":"Container","id":"c11c3c8c3m1r1a1","sN":11,"aN":"c3c8c3m1r1a1"}'> <a id="engineering-microsoft" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/engineering-at-microsoft/" data-m='{"cN":"CatNav_Engineering@Microsoft_nav","id":"n1c11c3c8c3m1r1a1","sN":1,"aN":"c11c3c8c3m1r1a1"}'>Engineering@Microsoft</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure SDK_cont","cT":"Container","id":"c12c3c8c3m1r1a1","sN":12,"aN":"c3c8c3m1r1a1"}'> <a id="Azure-sdk" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-sdk/" data-m='{"cN":"CatNav_Azure SDK_nav","id":"n1c12c3c8c3m1r1a1","sN":1,"aN":"c12c3c8c3m1r1a1"}'>Azure SDK</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Command Line_cont","cT":"Container","id":"c13c3c8c3m1r1a1","sN":13,"aN":"c3c8c3m1r1a1"}'> <a id="command-line" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/commandline/" data-m='{"cN":"CatNav_Command Line_nav","id":"n1c13c3c8c3m1r1a1","sN":1,"aN":"c13c3c8c3m1r1a1"}'>Command Line</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Perf and Diagnostics_cont","cT":"Container","id":"c14c3c8c3m1r1a1","sN":14,"aN":"c3c8c3m1r1a1"}'> <a id="perf-and-diagnostics" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/performance-diagnostics/" data-m='{"cN":"CatNav_Perf and Diagnostics_nav","id":"n1c14c3c8c3m1r1a1","sN":1,"aN":"c14c3c8c3m1r1a1"}'>Perf and Diagnostics</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"React Native_cont","cT":"Container","id":"c15c3c8c3m1r1a1","sN":15,"aN":"c3c8c3m1r1a1"}'> <a id="react-native" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/react-native/" data-m='{"cN":"CatNav_React Native_nav","id":"n1c15c3c8c3m1r1a1","sN":1,"aN":"c15c3c8c3m1r1a1"}'>React Native</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Technology-main" aria-expanded="false" data-m='{"cN":"CatNav_Technology_nonnav","id":"nn4c8c3m1r1a1","sN":4,"aN":"c8c3m1r1a1"}'>Technology</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Technology_cont","cT":"Container","id":"c5c8c3m1r1a1","sN":5,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"AutoGen_cont","cT":"Container","id":"c1c5c8c3m1r1a1","sN":1,"aN":"c5c8c3m1r1a1"}'> <a id="AutoGen" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/autogen/" data-m='{"cN":"CatNav_AutoGen_nav","id":"n1c1c5c8c3m1r1a1","sN":1,"aN":"c1c5c8c3m1r1a1"}'>AutoGen</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"DirectX_cont","cT":"Container","id":"c2c5c8c3m1r1a1","sN":2,"aN":"c5c8c3m1r1a1"}'> <a id="DirectX" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/directx/" data-m='{"cN":"CatNav_DirectX_nav","id":"n1c2c5c8c3m1r1a1","sN":1,"aN":"c2c5c8c3m1r1a1"}'>DirectX</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"OpenAPI_cont","cT":"Container","id":"c3c5c8c3m1r1a1","sN":3,"aN":"c5c8c3m1r1a1"}'> <a id="Openapi" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/openapi/" data-m='{"cN":"CatNav_OpenAPI_nav","id":"n1c3c5c8c3m1r1a1","sN":1,"aN":"c3c5c8c3m1r1a1"}'>OpenAPI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Semantic Kernel_cont","cT":"Container","id":"c4c5c8c3m1r1a1","sN":4,"aN":"c5c8c3m1r1a1"}'> <a id="semantic-kernel" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/semantic-kernel/" data-m='{"cN":"CatNav_Semantic Kernel_nav","id":"n1c4c5c8c3m1r1a1","sN":1,"aN":"c4c5c8c3m1r1a1"}'>Semantic Kernel</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"SurfaceDuo_cont","cT":"Container","id":"c5c5c8c3m1r1a1","sN":5,"aN":"c5c8c3m1r1a1"}'> <a id="SurfaceDuo" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/surface-duo/" data-m='{"cN":"CatNav_SurfaceDuo_nav","id":"n1c5c5c8c3m1r1a1","sN":1,"aN":"c5c5c8c3m1r1a1"}'>SurfaceDuo</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows AI Platform_cont","cT":"Container","id":"c6c5c8c3m1r1a1","sN":6,"aN":"c5c8c3m1r1a1"}'> <a id="windows-ai-platform" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/windowsai/" data-m='{"cN":"CatNav_Windows AI Platform_nav","id":"n1c6c5c8c3m1r1a1","sN":1,"aN":"c6c5c8c3m1r1a1"}'>Windows AI Platform</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Languages" aria-expanded="false" data-m='{"cN":"CatNav_Languages_nonnav","id":"nn6c8c3m1r1a1","sN":6,"aN":"c8c3m1r1a1"}'>Languages</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Languages_cont","cT":"Container","id":"c7c8c3m1r1a1","sN":7,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"C++_cont","cT":"Container","id":"c1c7c8c3m1r1a1","sN":1,"aN":"c7c8c3m1r1a1"}'> <a id="c++" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/cppblog/" data-m='{"cN":"CatNav_C++_nav","id":"n1c1c7c8c3m1r1a1","sN":1,"aN":"c1c7c8c3m1r1a1"}'>C++</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"C#_cont","cT":"Container","id":"c2c7c8c3m1r1a1","sN":2,"aN":"c7c8c3m1r1a1"}'> <a id="c#" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/csharp/" data-m='{"cN":"CatNav_C#_nav","id":"n1c2c7c8c3m1r1a1","sN":1,"aN":"c2c7c8c3m1r1a1"}'>C#</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"F#_cont","cT":"Container","id":"c3c7c8c3m1r1a1","sN":3,"aN":"c7c8c3m1r1a1"}'> <a id="F#" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/fsharp/" data-m='{"cN":"CatNav_F#_nav","id":"n1c3c7c8c3m1r1a1","sN":1,"aN":"c3c7c8c3m1r1a1"}'>F#</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"TypeScript_cont","cT":"Container","id":"c4c7c8c3m1r1a1","sN":4,"aN":"c7c8c3m1r1a1"}'> <a id="TypeScript" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/typescript/" data-m='{"cN":"CatNav_TypeScript_nav","id":"n1c4c7c8c3m1r1a1","sN":1,"aN":"c4c7c8c3m1r1a1"}'>TypeScript</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"PowerShell Community_cont","cT":"Container","id":"c5c7c8c3m1r1a1","sN":5,"aN":"c7c8c3m1r1a1"}'> <a id="powershell-community" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powershell-community/" data-m='{"cN":"CatNav_PowerShell Community_nav","id":"n1c5c7c8c3m1r1a1","sN":1,"aN":"c5c7c8c3m1r1a1"}'>PowerShell Community</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"PowerShell Team_cont","cT":"Container","id":"c6c7c8c3m1r1a1","sN":6,"aN":"c7c8c3m1r1a1"}'> <a id="powershell-team" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powershell/" data-m='{"cN":"CatNav_PowerShell Team_nav","id":"n1c6c7c8c3m1r1a1","sN":1,"aN":"c6c7c8c3m1r1a1"}'>PowerShell Team</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Python_cont","cT":"Container","id":"c7c7c8c3m1r1a1","sN":7,"aN":"c7c8c3m1r1a1"}'> <a id="Python" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/python/" data-m='{"cN":"CatNav_Python_nav","id":"n1c7c7c8c3m1r1a1","sN":1,"aN":"c7c7c8c3m1r1a1"}'>Python</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"JavaScript_cont","cT":"Container","id":"c8c7c8c3m1r1a1","sN":8,"aN":"c7c8c3m1r1a1"}'> <a id="JavaScript" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/tag/javascript/" data-m='{"cN":"CatNav_JavaScript_nav","id":"n1c8c7c8c3m1r1a1","sN":1,"aN":"c8c7c8c3m1r1a1"}'>JavaScript</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Java_cont","cT":"Container","id":"c9c7c8c3m1r1a1","sN":9,"aN":"c7c8c3m1r1a1"}'> <a id="Java" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/java/" data-m='{"cN":"CatNav_Java_nav","id":"n1c9c7c8c3m1r1a1","sN":1,"aN":"c9c7c8c3m1r1a1"}'>Java</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Java Blog in Chinese_cont","cT":"Container","id":"c10c7c8c3m1r1a1","sN":10,"aN":"c7c8c3m1r1a1"}'> <a id="java-blog-in-chinese" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/java-ch/" data-m='{"cN":"CatNav_Java Blog in Chinese_nav","id":"n1c10c7c8c3m1r1a1","sN":1,"aN":"c10c7c8c3m1r1a1"}'>Java Blog in Chinese</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Go_cont","cT":"Container","id":"c11c7c8c3m1r1a1","sN":11,"aN":"c7c8c3m1r1a1"}'> <a id="go" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/go/" data-m='{"cN":"CatNav_Go_nav","id":"n1c11c7c8c3m1r1a1","sN":1,"aN":"c11c7c8c3m1r1a1"}'>Go</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="c-shellmenu_36" aria-expanded="false" data-m='{"cN":"CatNav_.Net_nonnav","id":"nn8c8c3m1r1a1","sN":8,"aN":"c8c3m1r1a1"}'>.NET</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":".Net_cont","cT":"Container","id":"c9c8c3m1r1a1","sN":9,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"All .NET posts_cont","cT":"Container","id":"c1c9c8c3m1r1a1","sN":1,"aN":"c9c8c3m1r1a1"}'> <a id="all-dotnet-posts" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/ " data-m='{"cN":"CatNav_All .NET posts_nav","id":"n1c1c9c8c3m1r1a1","sN":1,"aN":"c1c9c8c3m1r1a1"}'>All .NET posts</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET Aspire_cont","cT":"Container","id":"c2c9c8c3m1r1a1","sN":2,"aN":"c9c8c3m1r1a1"}'> <a id="c-shellmenu_38" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/dotnet-aspire/" data-m='{"cN":"CatNav_.NET Aspire_nav","id":"n1c2c9c8c3m1r1a1","sN":1,"aN":"c2c9c8c3m1r1a1"}'>.NET Aspire</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET MAUI_cont","cT":"Container","id":"c3c9c8c3m1r1a1","sN":3,"aN":"c9c8c3m1r1a1"}'> <a id="dotnet-MAUI" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/maui/" data-m='{"cN":"CatNav_.NET MAUI_nav","id":"n1c3c9c8c3m1r1a1","sN":1,"aN":"c3c9c8c3m1r1a1"}'>.NET MAUI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"AI_cont","cT":"Container","id":"c4c9c8c3m1r1a1","sN":4,"aN":"c9c8c3m1r1a1"}'> <a id="AI" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/ai/" data-m='{"cN":"CatNav_AI_nav","id":"n1c4c9c8c3m1r1a1","sN":1,"aN":"c4c9c8c3m1r1a1"}'>AI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"ASP.NET Core_cont","cT":"Container","id":"c5c9c8c3m1r1a1","sN":5,"aN":"c9c8c3m1r1a1"}'> <a id="aspnet-core" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/aspnetcore/" data-m='{"cN":"CatNav_ASP.NET Core_nav","id":"n1c5c9c8c3m1r1a1","sN":1,"aN":"c5c9c8c3m1r1a1"}'>ASP.NET Core</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blazor_cont","cT":"Container","id":"c6c9c8c3m1r1a1","sN":6,"aN":"c9c8c3m1r1a1"}'> <a id="blazor" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/blazor/" data-m='{"cN":"CatNav_Blazor_nav","id":"n1c6c9c8c3m1r1a1","sN":1,"aN":"c6c9c8c3m1r1a1"}'>Blazor</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Entity Framework_cont","cT":"Container","id":"c7c9c8c3m1r1a1","sN":7,"aN":"c9c8c3m1r1a1"}'> <a id="entity-framework" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/entity-framework/" data-m='{"cN":"CatNav_Entity Framework_nav","id":"n1c7c9c8c3m1r1a1","sN":1,"aN":"c7c9c8c3m1r1a1"}'>Entity Framework</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Servicing_cont","cT":"Container","id":"c8c9c8c3m1r1a1","sN":8,"aN":"c9c8c3m1r1a1"}'> <a id="servicing" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/maintenance-and-updates/" data-m='{"cN":"CatNav_Servicing_nav","id":"n1c8c9c8c3m1r1a1","sN":1,"aN":"c8c9c8c3m1r1a1"}'>Servicing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET Blog in Chinese_cont","cT":"Container","id":"c9c9c8c3m1r1a1","sN":9,"aN":"c9c8c3m1r1a1"}'> <a id="dotnet-blog-in-chinese" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet-ch/" data-m='{"cN":"CatNav_.NET Blog in Chinese_nav","id":"n1c9c9c8c3m1r1a1","sN":1,"aN":"c9c9c8c3m1r1a1"}'>.NET Blog in Chinese</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="platform-development" aria-expanded="false" data-m='{"cN":"CatNav_Platform Development_nonnav","id":"nn10c8c3m1r1a1","sN":10,"aN":"c8c3m1r1a1"}'>Platform Development</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Platform Development_cont","cT":"Container","id":"c11c8c3m1r1a1","sN":11,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"#ifdef Windows_cont","cT":"Container","id":"c1c11c8c3m1r1a1","sN":1,"aN":"c11c8c3m1r1a1"}'> <a id="pax-windows" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ifdef-windows/" data-m='{"cN":"CatNav_#ifdef Windows_nav","id":"n1c1c11c8c3m1r1a1","sN":1,"aN":"c1c11c8c3m1r1a1"}'>#ifdef Windows</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Government_cont","cT":"Container","id":"c2c11c8c3m1r1a1","sN":2,"aN":"c11c8c3m1r1a1"}'> <a id="azure-government" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azuregov/" data-m='{"cN":"CatNav_Azure Government_nav","id":"n1c2c11c8c3m1r1a1","sN":1,"aN":"c2c11c8c3m1r1a1"}'>Azure Government</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure VM Runtime Team_cont","cT":"Container","id":"c3c11c8c3m1r1a1","sN":3,"aN":"c11c8c3m1r1a1"}'> <a id="azure-vm-runtime" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-vm-runtime/" data-m='{"cN":"CatNav_Azure VM Runtime Team_nav","id":"n1c3c11c8c3m1r1a1","sN":1,"aN":"c3c11c8c3m1r1a1"}'>Azure VM Runtime Team</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Bing Dev Center_cont","cT":"Container","id":"c4c11c8c3m1r1a1","sN":4,"aN":"c11c8c3m1r1a1"}'> <a id="bing-dev-center" class="js-subm-uhf-nav-link" href="https://blogs.bing.com/Developers-Blog/" data-m='{"cN":"CatNav_Bing Dev Center_nav","id":"n1c4c11c8c3m1r1a1","sN":1,"aN":"c4c11c8c3m1r1a1"}'>Bing Dev Center</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Edge Dev_cont","cT":"Container","id":"c5c11c8c3m1r1a1","sN":5,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-edge-dev" class="js-subm-uhf-nav-link" href="http://blogs.windows.com/msedgedev/" data-m='{"cN":"CatNav_Microsoft Edge Dev_nav","id":"n1c5c11c8c3m1r1a1","sN":1,"aN":"c5c11c8c3m1r1a1"}'>Microsoft Edge Dev</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Azure_cont","cT":"Container","id":"c6c11c8c3m1r1a1","sN":6,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-azure" class="js-subm-uhf-nav-link" href="http://azure.microsoft.com/blog/" data-m='{"cN":"CatNav_Microsoft Azure_nav","id":"n1c6c11c8c3m1r1a1","sN":1,"aN":"c6c11c8c3m1r1a1"}'>Microsoft Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft 365 Developer_cont","cT":"Container","id":"c7c11c8c3m1r1a1","sN":7,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-365-developer" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/microsoft365dev/" data-m='{"cN":"CatNav_Microsoft 365 Developer_nav","id":"n1c7c11c8c3m1r1a1","sN":1,"aN":"c7c11c8c3m1r1a1"}'>Microsoft 365 Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Entra Identity Developer Blog_cont","cT":"Container","id":"c8c11c8c3m1r1a1","sN":8,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-entra-identity-developer-blog" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/identity/" data-m='{"cN":"CatNav_Microsoft Entra Identity Developer Blog_nav","id":"n1c8c11c8c3m1r1a1","sN":1,"aN":"c8c11c8c3m1r1a1"}'>Microsoft Entra Identity Developer Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Old New Thing_cont","cT":"Container","id":"c9c11c8c3m1r1a1","sN":9,"aN":"c11c8c3m1r1a1"}'> <a id="old-new-thing" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/oldnewthing/" data-m='{"cN":"CatNav_Old New Thing_nav","id":"n1c9c11c8c3m1r1a1","sN":1,"aN":"c9c11c8c3m1r1a1"}'>Old New Thing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Power Platform_cont","cT":"Container","id":"c10c11c8c3m1r1a1","sN":10,"aN":"c11c8c3m1r1a1"}'> <a id="power-platform" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powerplatform/" data-m='{"cN":"CatNav_Power Platform_nav","id":"n1c10c11c8c3m1r1a1","sN":1,"aN":"c10c11c8c3m1r1a1"}'>Power Platform</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows MIDI and Music dev_cont","cT":"Container","id":"c11c11c8c3m1r1a1","sN":11,"aN":"c11c8c3m1r1a1"}'> <a id="windows-music-dev" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/windows-music-dev/" data-m='{"cN":"CatNav_Windows MIDI and Music dev_nav","id":"n1c11c11c8c3m1r1a1","sN":1,"aN":"c11c11c8c3m1r1a1"}'>Windows MIDI and Music dev</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="data-development" aria-expanded="false" data-m='{"cN":"CatNav_Date Development_nonnav","id":"nn12c8c3m1r1a1","sN":12,"aN":"c8c3m1r1a1"}'>Data Development</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Date Development_cont","cT":"Container","id":"c13c8c3m1r1a1","sN":13,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Cosmos DB_cont","cT":"Container","id":"c1c13c8c3m1r1a1","sN":1,"aN":"c13c8c3m1r1a1"}'> <a id="azure-cosmos-db" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/cosmosdb/" data-m='{"cN":"CatNav_Azure Cosmos DB_nav","id":"n1c1c13c8c3m1r1a1","sN":1,"aN":"c1c13c8c3m1r1a1"}'> Azure Cosmos DB</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Data Studio_cont","cT":"Container","id":"c2c13c8c3m1r1a1","sN":2,"aN":"c13c8c3m1r1a1"}'> <a id="azure-data-studio" class="js-subm-uhf-nav-link" href="https://cloudblogs.microsoft.com/sqlserver/?product=azure-data-studio" data-m='{"cN":"CatNav_Azure Data Studio_nav","id":"n1c2c13c8c3m1r1a1","sN":1,"aN":"c2c13c8c3m1r1a1"}'>Azure Data Studio</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure SQL_cont","cT":"Container","id":"c3c13c8c3m1r1a1","sN":3,"aN":"c13c8c3m1r1a1"}'> <a id="azure-SQL" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-sql/" data-m='{"cN":"CatNav_Azure SQL_nav","id":"n1c3c13c8c3m1r1a1","sN":1,"aN":"c3c13c8c3m1r1a1"}'>Azure SQL</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"OData_cont","cT":"Container","id":"c4c13c8c3m1r1a1","sN":4,"aN":"c13c8c3m1r1a1"}'> <a id="OData" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/odata/" data-m='{"cN":"CatNav_OData_nav","id":"n1c4c13c8c3m1r1a1","sN":1,"aN":"c4c13c8c3m1r1a1"}'>OData</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Revolutions R_cont","cT":"Container","id":"c5c13c8c3m1r1a1","sN":5,"aN":"c13c8c3m1r1a1"}'> <a id="revolutions-r" class="js-subm-uhf-nav-link" href="http://blog.revolutionanalytics.com/" data-m='{"cN":"CatNav_Revolutions R_nav","id":"n1c5c13c8c3m1r1a1","sN":1,"aN":"c5c13c8c3m1r1a1"}'>Revolutions R</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"SQL Server Data Tools_cont","cT":"Container","id":"c6c13c8c3m1r1a1","sN":6,"aN":"c13c8c3m1r1a1"}'> <a id="SQL-server-data-tools" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ssdt/" data-m='{"cN":"CatNav_SQL Server Data Tools_nav","id":"n1c6c13c8c3m1r1a1","sN":1,"aN":"c6c13c8c3m1r1a1"}'>SQL Server Data Tools</a> </li> </ul> </div> </li> <li id="overflow-menu" class="overflow-menu x-hidden uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button data-m='{"pid":"More","id":"nn14c8c3m1r1a1","sN":14,"aN":"c8c3m1r1a1"}' type="button" aria-label="More" aria-expanded="false">More</button> <ul id="overflow-menu-list" aria-hidden="true" class="overflow-menu-list"> </ul> </div> </li> </ul> </nav> <div class="c-uhfh-actions" data-m='{"cN":"Header actions_cont","cT":"Container","id":"c9c3m1r1a1","sN":9,"aN":"c3m1r1a1"}'> <div class="wf-menu"></div> <form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/search" method="GET" data-seAutoSuggest='' data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest" data-m='{"cN":"GlobalNav_Search_cont","cT":"Container","id":"c1c9c3m1r1a1","sN":1,"aN":"c9c3m1r1a1"}' aria-expanded="false"> <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-autocomplete="list" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search" name="query" role="combobox" placeholder="Search" data-m='{"cN":"SearchBox_nav","id":"n1c1c9c3m1r1a1","sN":1,"aN":"c1c9c3m1r1a1"}' data-toggle="tooltip" data-placement="right" title="Search" /> <button id="search" aria-label="Search" class="c-glyph" data-m='{"cN":"Search_nav","id":"n2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}' data-bi-mto="true" aria-expanded="false" disabled="disabled"> <span role="presentation">Search</span> <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span> </button> <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group"> <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll" data-m='{"cN":"search suggestions_cont","cT":"Container","id":"c3c1c9c3m1r1a1","sN":3,"aN":"c1c9c3m1r1a1"}'></ul> <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox"> <li class="c-menu-item"> <span tabindex="-1">No results</span></li> </ul> </div> </form> <button data-m='{"cN":"cancel-search","pid":"Cancel Search","id":"nn2c9c3m1r1a1","sN":2,"aN":"c9c3m1r1a1"}' id="cancel-search" class="cancel-search" aria-label="Cancel Search"> <span>Cancel</span> </button> </div> </div> </div> </header> </div> </div> </div><link rel="stylesheet" href="https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/1b-9d8ed9/c9-be0100/a6-e969ef/43-9f2e7c/82-8b5456/a0-5d3913/43-5a5ab8/ca-ae3ce4?ver=2.0&_cf=02242021_3231" type="text/css" media="all" /><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script><script src="https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/shell/_scrf/js/themes=default/54-af9f9f/d4-fb1f57/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/f9-a5b2ce/db-bc0148/dc-7e9864/6d-c07ea1/6f-dafe8c/f6-aa5278/73-a24d00/6d-1e7ed0/b7-cadaa7/c4-898cf2/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/d0-e64f3e/92-10345d/79-499886/7e-cda2d3/58-ab4971/ca-108466/e0-3c9860/de-884374/1f-100dea/33-abe4df/2b-8e0ae6?ver=2.0&_cf=02242021_3231&iife=1"></script> <!--/ UHF header --> <main class="devblogs-main" id="main" role="main"> <div class="wrapper"> <div class="container-evo pt-24"> <div class="breadcrumbs-wrapper" data-bi-area="breadcrumb" data-bi-id="breadcrumb"> <nav aria-label="breadcrumb"><ul class="breadcrumb d-flex flex-wrap p-0 m-0" style="list-style-type: none;"><li class="d-flex align-items-center evo-b"><a href="https://devblogs.microsoft.com/"><span>Dev Blogs</span></a><span class="breadcrumb-icon px-6"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" style="vertical-align: middle;"><path fill="none" stroke="currentColor" stroke-width="1" d="m9 5l7 7l-7 7"/></svg></span></li><li class="d-flex align-items-center evo-b"><a href="https://devblogs.microsoft.com/azure-sql/"><span>Azure SQL Devs’ Corner</span></a><span class="breadcrumb-icon px-6"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" style="vertical-align: middle;"><path fill="none" stroke="currentColor" stroke-width="1" d="m9 5l7 7l-7 7"/></svg></span></li><li class="d-flex align-items-center evo-b"><span class="current ebc-current-readmore fw-600">Brian Spendolini</span></li></ul></nav><!-- .breadcrumbs --> </div> <!-- alert-banner-starts --> <!-- alert-banner-ends --> </div> <div class="container-evo mt-80"> <div class="container-sidebar-author"> <aside data-bi-area="sidebar_author"> <header class="page-header author-header"> <div class="d-flex flex-row align-items-center gap-16 mb-16"> <!-- author icon --> <div class="avatar-parent rounded-pill"> <img class="rounded-pill" style="width:120px; height:120px;" src="https://devblogs.microsoft.com/azure-sql/wp-content/uploads/sites/56/2022/07/download-150x150.png" alt="Profile picture of Brian Spendolini"> </div> <!-- author icon --> <!-- author details --> <div style="flex: 1;"> <!-- author name --> <h1 class="fs-16 fw-600"> Brian Spendolini </h1> <!-- author name --> <!-- author title --> <p class="h5 fw-light mb-12 author-info"> Senior Product Manager, Azure SQL Database </p> <!-- author title --> <!-- author socials --> <ul class="d-flex align-items-center flex-wrap gap-16 my-0" style="padding-left: 0; list-style: none"> <li><a class="no-underline stayinformed" data-bi-id="author_page_sidebar_follow" data-bi-name="twitter" title="Twitter" aria-label="bspendolini Twitter profile" target="_blank" href="https://www.twitter.com/btspendo"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path class="dark-theme" d="M14.4821 10.6218L21.0389 3H19.4852L13.7919 9.61788L9.24467 3H4L10.8763 13.0074L4 21H5.55384L11.5661 14.0113L16.3683 21H21.613L14.4817 10.6218H14.4821ZM12.3539 13.0956L11.6572 12.0991L6.11372 4.16971H8.50033L12.974 10.5689L13.6707 11.5655L19.4859 19.8835H17.0993L12.3539 13.096V13.0956Z"/></svg></a></li> <li><a class="no-underline stayinformed" data-bi-id="author_page_sidebar_follow" data-bi-name="linkedin_profile_url" title="Linkedin" aria-label="bspendolini Linkedin profile" target="_blank" href="https://www.linkedin.com/in/btspendo"><img src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/images/social-icons/linkedin.svg" alt="linkedin_profile_url"></a></li> <li><a class="no-underline stayinformed" data-bi-id="author_page_sidebar_follow" data-bi-name="git_profile_url" title="Github" aria-label="bspendolini Github profile" target="_blank" href="https://github.com/JetterMcTedder"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="24" viewBox="0 0 25 24"><g clip-path="url(#clip0_4234_38739)"><path class="dark-theme" fill-rule="evenodd" clip-rule="evenodd" d="M13.2989 0C6.67328 0 0.5 5.37254 0.5 12.0004C0.5 17.3022 3.93804 21.7996 8.70651 23.3864C9.3069 23.4969 9.52569 23.1263 9.52569 22.8081C9.52569 22.5237 9.51538 21.7686 9.50949 20.7675C6.17163 21.4924 5.46737 19.1586 5.46737 19.1586C4.9215 17.7722 4.13473 17.4031 4.13473 17.4031C3.0452 16.6591 4.21724 16.6738 4.21724 16.6738C5.4217 16.7585 6.05523 17.9107 6.05523 17.9107C7.12562 19.7443 8.86416 19.2146 9.54779 18.9074C9.65682 18.1324 9.96696 17.6035 10.3095 17.3037C7.64497 17.0009 4.84341 15.971 4.84341 11.3727C4.84341 10.0629 5.3112 8.99107 6.07881 8.15274C5.95505 7.84923 5.54325 6.62856 6.19668 4.97695C6.19668 4.97695 7.2037 4.65429 9.49623 6.20719C10.4532 5.94051 11.4801 5.80791 12.5004 5.80276C13.5199 5.80791 14.5461 5.94051 15.5045 6.20719C17.7956 4.65429 18.8011 4.97695 18.8011 4.97695C19.456 6.62856 19.0442 7.84923 18.9212 8.15274C19.6903 8.99107 20.1544 10.0629 20.1544 11.3727C20.1544 15.9828 17.3484 16.9972 14.6758 17.2941C15.106 17.6646 15.4898 18.3969 15.4898 19.5166C15.4898 21.1204 15.475 22.4147 15.475 22.8081C15.475 23.1293 15.6916 23.5027 16.3001 23.3856C21.0649 21.7951 24.5 17.3007 24.5 12.0004C24.5 5.37254 19.1267 0 12.4989 0"/></g><defs><clipPath id="clip0_4234_38739"><rect width="24" height="24" fill="white" transform="translate(0.5)"/></clipPath></defs></svg></a></li> <li><a class="no-underline stayinformed" data-bi-id="author_page_sidebar_follow" data-bi-name="Subscribe to RSS Feed" aria-label="Subscribe to RSS Feed" target="_blank" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/feed/"><svg xmlns="http://www.w3.org/2000/svg" class="dark-theme-rss" width="24" height="24" viewBox="0 0 24 24" fill="none"><path class="dark-theme" d="M6.25 3C4.45507 3 3 4.45507 3 6.25V17.75C3 19.5449 4.45507 21 6.25 21H17.75C19.5449 21 21 19.5449 21 17.75V6.25C21 4.45507 19.5449 3 17.75 3H6.25ZM6.75 7.5C6.34494 7.5 6 7.18276 6 6.7777V6.7233C6 6.33021 6.30507 6.00189 6.69816 6.00012L6.75 6C12.9632 6 18 11.0368 18 17.25L17.9999 17.3018C17.9981 17.6949 17.6698 18 17.2767 18H17.2223C16.8172 18 16.5 17.6551 16.5 17.25C16.5 11.8652 12.1348 7.5 6.75 7.5ZM13.294 18H13.2036C12.805 18 12.5 17.6486 12.5 17.25C12.5 14.0744 9.92564 11.5 6.75 11.5C6.35135 11.5 6 11.195 6 10.7964V10.706C6 10.3267 6.2871 10.0048 6.66639 10.0005C6.69422 10.0002 6.72209 10 6.75 10C10.7541 10 14 13.2459 14 17.25C14 17.2779 13.9998 17.3058 13.9995 17.3336C13.9952 17.7129 13.6733 18 13.294 18ZM7.5 18C6.67157 18 6 17.3284 6 16.5C6 15.6716 6.67157 15 7.5 15C8.32843 15 9 15.6716 9 16.5C9 17.3284 8.32843 18 7.5 18Z" fill="#DA3B01"/></svg></a></li> </ul> <!-- author socials --> </div> </div> <!-- author description --> <div class="border-bottom mb-40"> <p class="mb-40 author-info"> </p> </div> <!-- author description --> <!-- author topics --> <div class="border-bottom mb-40"> <h3 class="fs-20 mb-16">Author Topics</h3> <div class="d-flex flex-wrap gap-8 mb-40 post-topics-list"> <a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/azure-sql/" aria-label="Azure SQL category" data-bi-id="author_page_sidebar_topics" data-bi-name="Azure SQL">Azure SQL</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/ai/" aria-label="AI category" data-bi-id="author_page_sidebar_topics" data-bi-name="AI">AI</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/devops/" aria-label="DevOps category" data-bi-id="author_page_sidebar_topics" data-bi-name="DevOps">DevOps</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/openai/" aria-label="OpenAI category" data-bi-id="author_page_sidebar_topics" data-bi-name="OpenAI">OpenAI</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/net/" aria-label=".NET category" data-bi-id="author_page_sidebar_topics" data-bi-name=".NET">.NET</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/azure-openai/" aria-label="Azure OpenAI category" data-bi-id="author_page_sidebar_topics" data-bi-name="Azure OpenAI">Azure OpenAI</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/rest/" aria-label="REST category" data-bi-id="author_page_sidebar_topics" data-bi-name="REST">REST</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/rest-endpoint-invocation/" aria-label="REST Endpoint Invocation category" data-bi-id="author_page_sidebar_topics" data-bi-name="REST Endpoint Invocation">REST Endpoint Invocation</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/visual-studio-code/" aria-label="Visual Studio Code category" data-bi-id="author_page_sidebar_topics" data-bi-name="Visual Studio Code">Visual Studio Code</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/github/" aria-label="GitHub category" data-bi-id="author_page_sidebar_topics" data-bi-name="GitHub">GitHub</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/langchain/" aria-label="LangChain category" data-bi-id="author_page_sidebar_topics" data-bi-name="LangChain">LangChain</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/azure-sql/managed-instance/" aria-label="Managed Instance category" data-bi-id="author_page_sidebar_topics" data-bi-name="Managed Instance">Managed Instance</a><a class="d-flex align-items-center btn-outline-secondary px-6 fw-600" href="https://devblogs.microsoft.com/azure-sql/category/azure-functions/" aria-label="Azure Functions category" data-bi-id="author_page_sidebar_topics" data-bi-name="Azure Functions">Azure Functions</a> </div> </div> <!-- author topics --> </header><!-- .page-header --> </aside> <section class="archive-posts" style="max-width: 1048px" data-bi-area="latest_posts"> <div class="archive-content-wrapper"> <div class="mb-24"><h2 class="fs-20 mb-16">Posts by this author</h2></div> <article class="post position-relative rounded" class="post-3108 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql category-managed-instance category-rest category-rest-endpoint-invocation tag-azure-sql-database tag-azuresql tag-azuresqldb tag-developers tag-development tag-rest" id="post-3108"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Apr 22, 2024 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>2</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/private-preview-for-external-rest-endpoint-invocation-with-azure-sql-managed-instance/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Private Preview for External REST Endpoint Invocation with Azure SQL Managed Instance">Private Preview for External REST Endpoint Invocation with Azure SQL Managed Instance</a></h3> </header> <div class="mt-16"> <p> We have an exciting opportunity for customers and partners to use External REST Endpoint Invocation with Azure SQL Managed Instance in a private preview. What is Azure SQL Managed Instance? Azure SQL Managed Instance is a PaaS service that has near 100% compatibility with the latest Enterprise Edition SQL Server database engine, providing a nativ... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST Endpoint Invocation</span> </div> </footer> </div> </article><!-- #post-3108 --><article class="post position-relative rounded" class="post-2989 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql tag-ai tag-azure-openai tag-azure-sql-database tag-azuresql tag-azuresqldb tag-developers tag-development tag-nl2sql tag-openai tag-python tag-vanna tag-vanna-ai" id="post-2989"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Apr 3, 2024 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>4</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/vanna-ai-and-azure-sql-database/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Vanna.ai and Azure SQL Database">Vanna.ai and Azure SQL Database</a></h3> </header> <div class="mt-16"> <p> Vanna.ai and Microsoft SQL Vanna.ai, in partnership with Azure SQL Database Product Management, bring you a collaboration for using Vanna's natural language to SQL (NL2SQL) agent with the Azure SQL Database. How does Vanna.ai work? First, Vanna is an open-source Python RAG (Retrieval-Augmented Generation) framework for SQL generation/natural lan... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span> </div> </footer> </div> </article><!-- #post-2989 --><article class="post position-relative rounded" class="post-2974 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql tag-azure-sql-database tag-azure-functions tag-azuresql tag-azuresqldb tag-c tag-developers tag-development tag-java tag-javascript tag-powershell tag-python tag-rest tag-t-sql" id="post-2974"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Mar 14, 2024 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>2</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>1</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/azure-sql-trigger-binding-for-azure-functions-goes-ga/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Azure SQL Trigger Binding for Azure Functions goes GA">Azure SQL Trigger Binding for Azure Functions goes GA</a></h3> </header> <div class="mt-16"> <p> Azure SQL Database Engineering and Product Management would like to announce that Azure SQL Trigger Binding for Azure Functions is now generally available (GA). Catching Up As a quick refresher, the Azure SQL trigger uses SQL change tracking functionality to monitor a SQL table for changes and trigger a function when a row is created, updated, or... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span> </div> </footer> </div> </article><!-- #post-2974 --><article class="post position-relative rounded" class="post-2916 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-azure-sql category-langchain category-openai tag-ai tag-azure-openai tag-azure-sql-database tag-azuresql tag-azuresqldb tag-developers tag-development tag-langchain tag-openai tag-python" id="post-2916"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Feb 19, 2024 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>2</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>2</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/nl2sql-with-langchain-and-azure-sql-database/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="NL2SQL with LangChain and Azure SQL Database">NL2SQL with LangChain and Azure SQL Database</a></h3> </header> <div class="mt-16"> <p> LangChain is an open-source framework for creating applications that use and are powered by language models (LLM/MLM/SML). In this post, basic LangChain components (toolkits, chains, agents) will be used to create a natural language to SQL prompt that will allow interactions with an Azure SQL Database; just ask the database what you want as if ... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">AI</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">OpenAI</span> </div> </footer> </div> </article><!-- #post-2916 --><article class="post position-relative rounded" class="post-2845 post type-post status-publish format-standard has-post-thumbnail hentry category-ai category-azure-openai category-azure-sql category-content-moderation category-openai category-rest category-rest-endpoint-invocation tag-ai tag-ai-safety tag-api tag-azure-openai tag-azure-sql-database tag-azuresql tag-azuresqldb tag-content-moderation tag-developers tag-development tag-rest tag-t-sql" id="post-2845"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Feb 12, 2024 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>1</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/using-ai-for-content-moderation-with-azure-sql-database/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Using AI for Content Moderation with Azure SQL Database">Using AI for Content Moderation with Azure SQL Database</a></h3> </header> <div class="mt-16"> <p> In my previous posts, I have covered using Azure OpenAI services with Azure SQL Database via REST endpoints. This post with further explore that pathway by creating stored procedures you can use to encapsulate the REST calls and combine them with custom business logic for AI content moderation with Azure SQL Database. A Quick Introduction The ser... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">AI</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">OpenAI</span> </div> </footer> </div> </article><!-- #post-2845 --><article class="post position-relative rounded" class="post-2666 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql category-openai category-rest category-rest-endpoint-invocation tag-azure-sql-database tag-azuresql tag-azuresqldb tag-developers tag-development tag-rest tag-t-sql" id="post-2666"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Nov 30, 2023 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>0</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/winter-2023-service-update-for-external-rest-endpoint-invocation/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Winter 2023 Service Update for External REST Endpoint Invocation">Winter 2023 Service Update for External REST Endpoint Invocation</a></h3> </header> <div class="mt-16"> <p> As December approaches, it's time for the winter 2023 update for External REST Endpoint Invocation. We have added four new Azure Service Endpoints: Bing Search, Azure Key Vault, Azure Communication Services, and Azure AI Search. Let's look at a few examples of using these new endpoints. Bing Search Endpoints Bing Seach has many useful API endpoin... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">OpenAI</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST</span> </div> </footer> </div> </article><!-- #post-2666 --><article class="post position-relative rounded" class="post-2435 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql category-openai category-rest category-rest-endpoint-invocation tag-azure-sql-database tag-azuresql tag-azuresqldb tag-dall-e tag-developers tag-openai tag-rest tag-t-sql" id="post-2435"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Sep 25, 2023 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>1</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/generate-images-with-openai-and-azure-sql/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Generate images with Azure OpenAI Service (DALL-E) and Azure SQL Database">Generate images with Azure OpenAI Service (DALL-E) and Azure SQL Database</a></h3> </header> <div class="mt-16"> <p> Following on the series of OpenAI posts I have done recently, here is a quick how-to on using DALL-E with External REST endpoint invocation in the Azure SQL Database. Using the OpenAI service in Azure, we can use the image generation REST endpoints to create new and wonderful images such as, if you remember, the cat in the data center. So ho... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">OpenAI</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST</span> </div> </footer> </div> </article><!-- #post-2435 --><article class="post position-relative rounded" class="post-2364 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql" id="post-2364"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Sep 5, 2023 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>2</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/using-openai-rest-endpoints-with-azure-sql-database/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Using OpenAI REST Endpoints with Azure SQL Database">Using OpenAI REST Endpoints with Azure SQL Database</a></h3> </header> <div class="mt-16"> <p> Everyone loves OpenAI these days as it can do some amazing things. Here, I asked it to create a picture of a cat in a data center: (Go ahead and click the image to see a bigger version of this nightmare fuel) Incredible!!!! But how can we use OpenAI in real world applications and scenarios with Azure SQL Database? Using OpenAI with the Az... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span> </div> </footer> </div> </article><!-- #post-2364 --><article class="post position-relative rounded" class="post-2341 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-sql category-devops category-github category-rest category-rest-endpoint-invocation tag-azure-sql-database tag-azuresql tag-azuresqldb tag-developers tag-development tag-devops tag-rest tag-t-sql" id="post-2341"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Aug 28, 2023 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>0</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>3</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/rest-endpoint-invocation-is-now-generally-available/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="REST Endpoint Invocation is now Generally Available">REST Endpoint Invocation is now Generally Available</a></h3> </header> <div class="mt-16"> <p> On behalf of the Engineering and Product Management teams, we are happy to announce that External REST Endpoint Invocation is now GA! What is External REST Endpoint Invocation? External REST Endpoint Invocation makes it possible for developers to call REST/GraphQL endpoints from other Azure Services from right in the Azure SQL Database.... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">DevOps</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST</span> </div> </footer> </div> </article><!-- #post-2341 --><article class="post position-relative rounded" class="post-2300 post type-post status-publish format-standard has-post-thumbnail hentry category-azure-functions category-azure-sql category-rest category-rest-endpoint-invocation tag-net tag-azure-sql-database tag-azure-functions tag-azuresql tag-azuresqldb tag-developers tag-functions tag-json tag-rest tag-serverless tag-t-sql tag-xml" id="post-2300"> <div class="bg-white box p-24 rounded shadow mb-40 border-1"> <header class="entry-header"> <div class="d-flex justify-content-between mb-16"> <div class="d-flex align-items-left gap-4"> Aug 7, 2023 </div> <div class="d-flex gap-24"> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8424H15.4C16.2962 13.8424 17 13.1289 17 12.2766V5.56594C17 4.7136 16.2962 4.00012 15.4 4.00012H4.6C3.70383 4.00012 3 4.7136 3 5.56594V12.2766C3 13.1289 3.70383 13.8424 4.6 13.8424H6.19908L6.2 17.0001L6.20346 16.9999L6.20502 16.999L10.4809 13.8424ZM6.79895 17.8035C6.35668 18.1299 5.73 18.0407 5.39921 17.6043C5.26989 17.4336 5.2 17.2263 5.2 17.0134L5.19937 14.8424H4.6C3.16406 14.8424 2 13.6936 2 12.2766V5.56594C2 4.14888 3.16406 3.00012 4.6 3.00012H15.4C16.8359 3.00012 18 4.14888 18 5.56594V12.2766C18 13.6936 16.8359 14.8424 15.4 14.8424H10.81L6.79895 17.8035Z" fill="#0F6CBD" /> </svg> <span>2</span> </div> <div class="d-flex align-items-right gap-4"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /> </svg> <span>0</span> </div> </div> </div> <h3 class="fs-24 mb-16"><a class="single-click" href="https://devblogs.microsoft.com/azure-sql/summer-2023-update-for-azure-sql-db-external-rest-endpoint-invocation/" rel="bookmark" data-bi-id="author_page_latest_posts_card_singleclick" data-bi-name="Summer 2023 Update for Azure SQL Database External REST Endpoint Invocation">Summer 2023 Update for Azure SQL Database External REST Endpoint Invocation</a></h3> </header> <div class="mt-16"> <p> Summer 2023 REST Endpoint Invocation Update Welcome to the Summer 2023 REST Endpoint Invocation update post! This summer, we updated the External REST Endpoints Invocation feature with a few key fixes and additions to help you use more Azure Services with your Azure SQL Database. The feature was released to public preview last year and this late... </p> </div> <footer> <div class="d-flex flex-wrap gap-16 feature-border-top post-topics-list mt-16 pt-16"> <span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">Azure SQL</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST</span><span class="d-flex align-items-center cat btn-outline-secondary fw-600 px-8 tag-disabled">REST Endpoint Invocation</span> </div> </footer> </div> </article><!-- #post-2300 --> <!-- End Loop --> <!-- The pagination component --> </div> <div class="evoposts-paginate fs-16 d-flex justify-content-center border-top pt-12" data-bi-area="latest_posts" data-bi-id="author_page_latest_posts_load_more"> <nav class="navigation pagination" aria-label="Posts"> <h2 class="screen-reader-text">Posts navigation</h2> <div class="nav-links"><span aria-current="page" class="page-numbers current">1</span> <a class="page-numbers" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/page/2/">2</a> <a class="next page-numbers" href="https://devblogs.microsoft.com/azure-sql/author/bspendolini/page/2/">Load more posts</a></div> </nav> <div id="loader-overlay" class="evoposts-preloader lp-loader hidden"> <div class="cv-spinner"> <span class="spinner"></span> </div> </div> </div> </section> </div> <!-- .row --> </div><!-- #content --> </div><!-- end .wrapper --> </main><!-- end #main --> <!-- Add a hidden dark theme button to trigger the toggle function --> <div style="display:none;"> <div class="login-section c-me d-flex align-items-center"> <a class="login-but d-flex align-items-center" href="https://devblogs.microsoft.com/azure-sql/wp-login.php?redirect_to=https%3A%2F%2Fdevblogs.microsoft.com%2Fazure-sql%2Fauthor%2Fbspendolini%2F">Sign in</a> </div> </div><div id="theme-picker" data-bi-name="Switch to dark theme" class="c-me theme-picker d-flex align-items-center"> <button id="theme-picker-button" style="height: 25px; margin-right: 24px;" class="d-flex btn border-r-12" aria-pressed="false" aria-label="Dark theme switch"> <span class="theme-text fs-12 d-flex align-items-center" style="overflow-x: visible;padding: 0px 8px; gap: 8px;"></svg>Theme</span> </button> </div> <script> // Get iframe youtube video length var iframes = jQuery('iframe[src^="https://www.youtube.com/embed/"], iframe[src^="//www.youtube.com/embed/"], iframe[src^="http://www.youtube.com/embed/"], iframe[src^="www.youtube.com/embed/"], iframe[src^="youtube.com/embed/"], iframe[src^="https://www.youtube.com/"]'); var i, len; len = iframes.length; // Country JSON data function funJSONData(countryData) { if (countryData.Country == 'CN') { if (len > 0) { for (var i = 0; i < len; ++i) { var el = iframes[i]; el.parentNode.removeChild(el); } } } } jQuery(document).ready(function () { // Remove youtube videos from page }); </script> <script type="text/javascript" id="commentsvote-js-extra"> /* <![CDATA[ */ var votecommentajax = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/devblogs-comments-evo/admin/js/commentsvote.js?ver=1.1" id="commentsvote-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/metronet-profile-picture/js/mpp-frontend.js?ver=2.6.3" id="mpp_gutenberg_tabs-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/devblogs-evo-breadcrumbs/assets/breadcrumbs.min.js?ver=1.5" id="evo-breadcrumb-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/shortcode-toc/assets/vendor/js/anchorific.js?ver=1.0.3" id="anchorific-js"></script> <script type="text/javascript" id="code-prettify-js-before"> /* <![CDATA[ */ var codePrettifyLoaderBaseUrl = "https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/plugins\/code-prettify\/prettify"; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/code-prettify/prettify/run_prettify.js?ver=1.4.0" id="code-prettify-js"></script> <script type="text/javascript" id="devblogs-evo-scripts-js-extra"> /* <![CDATA[ */ var devblogs_ajax2 = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-admin\/admin-ajax.php"}; var devblogs_ajax_evo = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/theme.min.js?ver=1.2.0.1729015445" id="devblogs-evo-scripts-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/custom-theme.min.js?ver=1.1" id="custom-theme-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/loadmore-ajax.js?ver=1724171886" id="loadmore-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/theme-picker.min.js?ver=1731007193" id="theme-picker-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/dropdown-menu.min.js?ver=1729185945" id="dropdown-menu-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/accordion-toggle.min.js?ver=1727281833" id="accordion-toggle-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/themes/devblogs-evo/js/gifffer.min.js?ver=1.1" id="gifffer-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/wp-featherlight/js/wpFeatherlight.pkgd.min.js?ver=1.3.4" id="wp-featherlight-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/azure-sql/wp-content/plugins/devblogs-blocks/assets/highlight.js" id="highlight-script-js"></script> <script type="text/javascript">(function (undefined) {let scriptOptions={"_localizedStrings":{"redirect_overlay_title":"Hold On","redirect_overlay_text":"You are being redirected to another page,<br>it may take a few seconds.","webview_notification_text":"The selected provider doesn't support embedded browsers!"},"_targetWindow":"prefer-popup","_redirectOverlay":"overlay-with-spinner-and-message","_unsupportedWebviewBehavior":""}; /** * Used when Cross-Origin-Opener-Policy blocked the access to the opener. We can't have a reference of the opened windows, so we should attempt to refresh only the windows that has opened popups. */ window._nslHasOpenedPopup = false; window._nslWebViewNoticeElement = null; window.NSLPopup = function (url, title, w, h) { const userAgent = navigator.userAgent, mobile = function () { return /\b(iPhone|iP[ao]d)/.test(userAgent) || /\b(iP[ao]d)/.test(userAgent) || /Android/i.test(userAgent) || /Mobile/i.test(userAgent); }, screenX = window.screenX !== undefined ? window.screenX : window.screenLeft, screenY = window.screenY !== undefined ? window.screenY : window.screenTop, outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth, outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22, targetWidth = mobile() ? null : w, targetHeight = mobile() ? null : h, left = parseInt(screenX + (outerWidth - targetWidth) / 2, 10), right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10), features = []; if (targetWidth !== null) { features.push('width=' + targetWidth); } if (targetHeight !== null) { features.push('height=' + targetHeight); } features.push('left=' + left); features.push('top=' + right); features.push('scrollbars=1'); const newWindow = window.open(url, title, features.join(',')); if (window.focus) { newWindow.focus(); } window._nslHasOpenedPopup = true; return newWindow; }; let isWebView = null; function checkWebView() { if (isWebView === null) { function _detectOS(ua) { if (/Android/.test(ua)) { return "Android"; } else if (/iPhone|iPad|iPod/.test(ua)) { return "iOS"; } else if (/Windows/.test(ua)) { return "Windows"; } else if (/Mac OS X/.test(ua)) { return "Mac"; } else if (/CrOS/.test(ua)) { return "Chrome OS"; } else if (/Firefox/.test(ua)) { return "Firefox OS"; } return ""; } function _detectBrowser(ua) { let android = /Android/.test(ua); if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) { return "Opera"; } else if (/CriOS/.test(ua)) { return "Chrome for iOS"; } else if (/Edge/.test(ua)) { return "Edge"; } else if (android && /Silk\//.test(ua)) { return "Silk"; } else if (/Chrome/.test(ua)) { return "Chrome"; } else if (/Firefox/.test(ua)) { return "Firefox"; } else if (android) { return "AOSP"; } else if (/MSIE|Trident/.test(ua)) { return "IE"; } else if (/Safari\//.test(ua)) { return "Safari"; } else if (/AppleWebKit/.test(ua)) { return "WebKit"; } return ""; } function _detectBrowserVersion(ua, browser) { if (browser === "Opera") { return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") : / OPR/.test(ua) ? _getVersion(ua, " OPR/") : _getVersion(ua, " OPT/"); } else if (browser === "Chrome for iOS") { return _getVersion(ua, "CriOS/"); } else if (browser === "Edge") { return _getVersion(ua, "Edge/"); } else if (browser === "Chrome") { return _getVersion(ua, "Chrome/"); } else if (browser === "Firefox") { return _getVersion(ua, "Firefox/"); } else if (browser === "Silk") { return _getVersion(ua, "Silk/"); } else if (browser === "AOSP") { return _getVersion(ua, "Version/"); } else if (browser === "IE") { return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") : /MSIE/.test(ua) ? _getVersion(ua, "MSIE ") : _getVersion(ua, "rv:"); } else if (browser === "Safari") { return _getVersion(ua, "Version/"); } else if (browser === "WebKit") { return _getVersion(ua, "WebKit/"); } return "0.0.0"; } function _getVersion(ua, token) { try { return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]); } catch (o_O) { } return "0.0.0"; } function _normalizeSemverString(version) { const ary = version.split(/[\._]/); return (parseInt(ary[0], 10) || 0) + "." + (parseInt(ary[1], 10) || 0) + "." + (parseInt(ary[2], 10) || 0); } function _isWebView(ua, os, browser, version, options) { switch (os + browser) { case "iOSSafari": return false; case "iOSWebKit": return _isWebView_iOS(options); case "AndroidAOSP": return false; case "AndroidChrome": return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options); } return false; } function _isWebView_iOS(options) { const document = (window["document"] || {}); if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false); } function _isWebView_Android(options) { if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false); } const options = {}, nav = window.navigator || {}, ua = nav.userAgent || "", os = _detectOS(ua), browser = _detectBrowser(ua), browserVersion = _detectBrowserVersion(ua, browser); isWebView = _isWebView(ua, os, browser, browserVersion, options); } return isWebView; } function isAllowedWebViewForUserAgent(provider) { const facebookAllowedWebViews = [ 'Instagram', 'FBAV', 'FBAN' ]; let whitelist = []; if (provider && provider === 'facebook') { whitelist = facebookAllowedWebViews; } const nav = window.navigator || {}, ua = nav.userAgent || ""; if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) { return true; } return false; } function disableButtonInWebView(providerButtonElement) { if (providerButtonElement) { providerButtonElement.classList.add('nsl-disabled-provider'); providerButtonElement.setAttribute('href', '#'); providerButtonElement.addEventListener('pointerdown', (e) => { if (!window._nslWebViewNoticeElement) { window._nslWebViewNoticeElement = document.createElement('div'); window._nslWebViewNoticeElement.id = "nsl-notices-fallback"; window._nslWebViewNoticeElement.addEventListener('pointerdown', function (e) { this.parentNode.removeChild(this); window._nslWebViewNoticeElement = null; }); const webviewNoticeHTML = '<div class="error"><p>' + scriptOptions._localizedStrings.webview_notification_text + '</p></div>'; window._nslWebViewNoticeElement.insertAdjacentHTML("afterbegin", webviewNoticeHTML); document.body.appendChild(window._nslWebViewNoticeElement); } }); } } window._nslDOMReady(function () { window.nslRedirect = function (url) { if (scriptOptions._redirectOverlay) { const overlay = document.createElement('div'); overlay.id = "nsl-redirect-overlay"; let overlayHTML = ''; const overlayContainer = "<div id='nsl-redirect-overlay-container'>", overlayContainerClose = "</div>", overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>", overlayTitle = "<p id='nsl-redirect-overlay-title'>" + scriptOptions._localizedStrings.redirect_overlay_title + "</p>", overlayText = "<p id='nsl-redirect-overlay-text'>" + scriptOptions._localizedStrings.redirect_overlay_text + "</p>"; switch (scriptOptions._redirectOverlay) { case "overlay-only": break; case "overlay-with-spinner": overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose; break; default: overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose; break; } overlay.insertAdjacentHTML("afterbegin", overlayHTML); document.body.appendChild(overlay); } window.location = url; }; let targetWindow = scriptOptions._targetWindow || 'prefer-popup', lastPopup = false; const buttonLinks = document.querySelectorAll(' a[data-plugin="nsl"][data-action="connect"], a[data-plugin="nsl"][data-action="link"]'); buttonLinks.forEach(function (buttonLink) { buttonLink.addEventListener('click', function (e) { if (lastPopup && !lastPopup.closed) { e.preventDefault(); lastPopup.focus(); } else { let href = this.href, success = false; if (href.indexOf('?') !== -1) { href += '&'; } else { href += '?'; } const redirectTo = this.dataset.redirect; if (redirectTo === 'current') { href += 'redirect=' + encodeURIComponent(window.location.href) + '&'; } else if (redirectTo && redirectTo !== '') { href += 'redirect=' + encodeURIComponent(redirectTo) + '&'; } if (targetWindow !== 'prefer-same-window' && checkWebView()) { targetWindow = 'prefer-same-window'; } if (targetWindow === 'prefer-popup') { lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', this.dataset.popupwidth, this.dataset.popupheight); if (lastPopup) { success = true; e.preventDefault(); } } else if (targetWindow === 'prefer-new-tab') { const newTab = window.open(href + 'display=popup', '_blank'); if (newTab) { if (window.focus) { newTab.focus(); } success = true; window._nslHasOpenedPopup = true; e.preventDefault(); } } if (!success) { window.location = href; e.preventDefault(); } } }); }); let buttonCountChanged = false; const googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]'); if (googleLoginButtons.length && checkWebView()) { googleLoginButtons.forEach(function (googleLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(googleLoginButton); } else { googleLoginButton.remove(); buttonCountChanged = true; } }); } const facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]'); if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) { facebookLoginButtons.forEach(function (facebookLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(facebookLoginButton); } else { facebookLoginButton.remove(); buttonCountChanged = true; } }); } const separators = document.querySelectorAll('div.nsl-separator'); if (buttonCountChanged && separators.length) { separators.forEach(function (separator) { const separatorParentNode = separator.parentNode; if (separatorParentNode) { const separatorButtonContainer = separatorParentNode.querySelector('div.nsl-container-buttons'); if (separatorButtonContainer && !separatorButtonContainer.hasChildNodes()) { separator.remove(); } } }) } }); /** * Cross-Origin-Opener-Policy blocked the access to the opener */ if (typeof BroadcastChannel === "function") { const _nslLoginBroadCastChannel = new BroadcastChannel('nsl_login_broadcast_channel'); _nslLoginBroadCastChannel.onmessage = (event) => { if (window?._nslHasOpenedPopup && event.data?.action === 'redirect') { window._nslHasOpenedPopup = false; const url = event.data?.href; _nslLoginBroadCastChannel.close(); if (typeof window.nslRedirect === 'function') { window.nslRedirect(url); } else { window.opener.location = url; } } }; }})();</script> <!-- Model form for code insert --> <div class="modal fade" id="codeModal" tabindex="-1" role="dialog" aria-labelledby="codeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="codeModalLabel">Code Block</h5> <button type="button" class="close" onclick="myCodeCancelFunction()" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <form id="myForm" action="#"> <div class="modal-body"> <div class="form-group"> <label for="code-text">Paste your code snippet</label> <textarea class="form-control" id="code-text" style="height: 150px;"></textarea> </div> </div> <div class="modal-footer"> <button type="button" onclick="myCodeFunction()" class="btn btn-primary">Ok</button> <button type="button" name="Cancel" onclick="myCodeCancelFunction()" class="btn btn-secondary" data-dismiss="modal">Cancel</button> </div> </form> </div> </div> </div> <div class="back-comment-buttons" data-bi-area="sidebar"> <style> .evo-right-sidebar { position: fixed !important; right: 10px; bottom: 188px; } .evo-sidebar-button { display: none; visibility: hidden; padding: 0; z-index: 99999; border-radius: 50%; margin-bottom: 1rem; } .evo-sidebar-button:hover { text-decoration: none; } .evo-sidebar-button.active { display: flex; visibility: visible; } .evo-sidebar-button-inner { padding: 5px 8.5px; border-radius: 50%; background: var(--clr-card-bg); box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.14), 0px 0px 2px 0px rgba(0, 0, 0, 0.12); color: var(--clr-landing-navbar); } .evo-sidebar-button-inner i, .evo-sidebar-button-inner i::before { color: var(--clr-landing-navbar); } </style> <div class="evo-right-sidebar"> <a data-bi-id="click back to top of page" data-bi-name="Back to top" href="#page" title="Back to top" aria-label="click back to top of page" class="evo-sidebar-button back-to-top"> <span class="evo-sidebar-button-inner"> <svg width="30" height="30" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M39.5607 32.0607C38.9749 32.6464 38.0251 32.6464 37.4393 32.0607L24 18.6213L10.5607 32.0607C9.97487 32.6464 9.02513 32.6464 8.43934 32.0607C7.85355 31.4749 7.85355 30.5251 8.43934 29.9393L22.9393 15.4393C23.5251 14.8536 24.4749 14.8536 25.0607 15.4393L39.5607 29.9393C40.1464 30.5251 40.1464 31.4749 39.5607 32.0607Z" fill="currentColor"/> </svg> </span> </a> </div> </div> <!-- Usabilla feedback button --> <div id="usabilla-button" class="vscom-usabilla-button"> <a tabindex="0" id="usbl-integrated-button" data-bi-area="sidebar" data-bi-id="Usabilla feedback button" data-bi-name="Usabilla feedback button" href="javascript:" class="vscom-usabilla-link" role="button" onkeypress="if(event.keyCode==32||event.keyCode==13){event.preventDefault();var bt = document.getElementById('usbl-integrated-button');bt.click(event);};"> <p class="vscom-usabilla-text"> Feedback </p> </a> </div> <script type="text/javascript"> /*{literal}<![CDATA[*/ window.lightningjs || function (c) { function g(b, d) { d && (d += (/\?/.test(d) ? "&" : "?") + "lv=1"); c[b] || function () { var i = window, h = document, j = b, g = h.location.protocol, l = "load", k = 0; (function () { function b() { a.P(l); a.w = 1; c[j]("_load") } c[j] = function () { function m() { m.id = e; return c[j].apply(m, arguments) } var b, e = ++k; b = this && this != i ? this.id || 0 : 0; (a.s = a.s || []).push([e, b, arguments]); m.then = function (b, c, h) { var d = a.fh[e] = a.fh[e] || [], j = a.eh[e] = a.eh[e] || [], f = a.ph[e] = a.ph[e] || []; b && d.push(b); c && j.push(c); h && f.push(h); return m }; return m }; var a = c[j]._ = {}; a.fh = {}; a.eh = {}; a.ph = {}; a.l = d ? d.replace(/^\/\//, (g == "https:" ? g : "http:") + "//") : d; a.p = { 0: +new Date }; a.P = function (b) { a.p[b] = new Date - a.p[0] }; a.w && b(); i.addEventListener ? i.addEventListener(l, b, !1) : i.attachEvent("on" + l, b); var q = function () { function b() { return ["<head></head><", c, ' onload="var d=', n, ";d.getElementsByTagName('head')[0].", d, "(d.", g, "('script')).", i, "='", a.l, "'\"></", c, ">"].join("") } var c = "body", e = h[c]; if (!e) return setTimeout(q, 100); a.P(1); var d = "appendChild", g = "createElement", i = "src", k = h[g]("div"), l = k[d](h[g]("div")), f = h[g]("iframe"), n = "document", p; k.style.display = "none"; e.insertBefore(k, e.firstChild).id = o + "-" + j; f.frameBorder = "0"; f.id = o + "-frame-" + j; /MSIE[ ]+6/.test(navigator.userAgent) && (f[i] = "javascript:false"); f.allowTransparency = "true"; l[d](f); try { f.contentWindow[n].open() } catch (s) { a.domain = h.domain, p = "javascript:var d=" + n + ".open();d.domain='" + h.domain + "';", f[i] = p + "void(0);" } try { var r = f.contentWindow[n]; r.write(b()); r.close() } catch (t) { f[i] = p + 'd.write("' + b().replace(/"/g, String.fromCharCode(92) + '"') + '");d.close();' } a.P(2) }; a.l && setTimeout(q, 0) })() }(); c[b].lv = "1"; return c[b] } var o = "lightningjs", k = window[o] = g(o); k.require = g; k.modules = c }({}); if (!navigator.userAgent.match(/Android|BlackBerry|BB10|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) { window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/2a41eea4c9e1.js"); } else { window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/29d0684d6043.js"); } window.usabilla_live("hide"); document.getElementById("usbl-integrated-button").addEventListener("click", function () { window.usabilla_live("click"); }); /*]]>{/literal}*/ // Store the element that triggered the modal let triggerElement; jQuery(document).ready(function () { // Hook into Featherlight's beforeOpen event to capture the trigger element jQuery(document).on('click', '[data-featherlight]', function (event) { // Save the element that triggered the Featherlight modal triggerElement = jQuery(this); }); // Hook into the afterClose event to return focus to the trigger element jQuery.featherlight.defaults.afterClose = function () { if (triggerElement) { triggerElement.focus(); // Return focus to the element that triggered the modal } }; }); </script> <!-- UHF footer --> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/DEV_Blogs/DEV_BlogsFooter, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What's new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a> </li> <li> <a aria-label="Surface Laptop What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a> </li> <li> <a aria-label="Surface Laptop Studio 2 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Microsoft Copilot What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="AI in Windows What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>AI in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What's new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/copilot/copilot-for-work" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft 365 Copilot</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer & IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer & IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Developer Center Developer & IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_DeveloperCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Developer Center</a> </li> <li> <a aria-label="Documentation Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer & IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer & IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer & IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer & IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a data-m='{"id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer"> <span>Consumer Health Privacy</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_sitemap"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m='{"cN":"Footer_Sitemap_nav","id":"n1c10c1c1m1r1a2","sN":1,"aN":"c10c1c1m1r1a2"}'>Sitemap</a> </li> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://support.microsoft.com/contactus" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n2c10c1c1m1r1a2","sN":2,"aN":"c10c1c1m1r1a2"}'>Contact Microsoft</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n3c10c1c1m1r1a2","sN":3,"aN":"c10c1c1m1r1a2"}'>Privacy </a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n4c10c1c1m1r1a2","sN":4,"aN":"c10c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n5c10c1c1m1r1a2","sN":5,"aN":"c10c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196228" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n6c10c1c1m1r1a2","sN":6,"aN":"c10c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_safetyandeco"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196227" data-mscc-ic="false" data-m='{"cN":"Footer_SafetyAndEco_nav","id":"n7c10c1c1m1r1a2","sN":7,"aN":"c10c1c1m1r1a2"}'>Safety & eco</a> </li> <li id="c-uhff-recycling"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/legal/compliance/recycling" data-mscc-ic="false" data-m='{"cN":"Recycling_nav","id":"n8c10c1c1m1r1a2","sN":8,"aN":"c10c1c1m1r1a2"}'>Recycling</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com" data-mscc-ic="false" data-m='{"cN":"Footer_AboutourAds_nav","id":"n9c10c1c1m1r1a2","sN":9,"aN":"c10c1c1m1r1a2"}'>About our ads</a> </li> <li>© Microsoft 2024</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> const globalPrivacyControlEnabled = navigator.globalPrivacyControl; const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut'; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue) ? cookieValue[2] : ''; } </script> </div> </div> </div><!--/ UHF footer --> <!-- UHF search functionality query parameter append for all pages excluding landing page --> <script type="text/javascript"> var serachHtml = '<input type="hidden" name="blog" value="/azure-sql/" data-m="{"cN":"HiddenInput_nav","id":"n2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}" style="overflow-x: visible;">'; jQuery(".c-uhfh-actions #searchForm").append(serachHtml); </script> </body> </html>