{"id":111503,"date":"2026-06-26T12:00:00","date_gmt":"2026-06-26T12:00:00","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=111503"},"modified":"2026-06-22T13:24:23","modified_gmt":"2026-06-22T13:24:23","slug":"5-t-sql-features-that-should-already-exist-2026-sql-server-wish-list","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/5-t-sql-features-that-should-already-exist-2026-sql-server-wish-list\/","title":{"rendered":"5 T-SQL features that should already exist (2026 SQL Server wish list)"},"content":{"rendered":"\n<p><strong>SQL Server is one of the most mature database platforms in the world, but that doesn&#8217;t mean it&#8217;s finished. With T-SQL now spanning Fabric, Azure SQL Database, Synapse, and SQL Managed Instance, the gap between what the language <em>can<\/em> do and what developers <em>wish<\/em> it could do is more visible than ever. <\/strong><\/p>\n\n\n\n<p><strong>From clunky flat-file imports to licensing models that require a legal degree to navigate, there are real pain points that slow down data engineers and DBAs daily. This is Ed Pollack&#8217;s frank, opinionated look at five meaningful improvements that would make SQL Server and T-SQL genuinely better &#8211; not just for power users, but for anyone building on Microsoft&#8217;s data platform in 2026.<\/strong><\/p>\n\n\n\n<p>It&#8217;s mid-2026, and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft SQL Server<\/a> is an exceptionally mature database product. Even more important today is that T-SQL is becoming a multi-platform language &#8211; used in <a href=\"https:\/\/www.red-gate.com\/simple-talk\/data-analytics\/microsoft-fabric\/\" target=\"_blank\" rel=\"noreferrer noopener\">Fabric<\/a>, Azure SQL Database, Synapse, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/sql-mi-configuration-gotchas\/\" target=\"_blank\" rel=\"noreferrer noopener\">SQL Managed Instance<\/a>, and a variety of other applications.<\/p>\n\n\n\n<p>While each variant of T-SQL and each database platform is different in its implementation and details, there remain features that I continue to wish for &#8211; and request &#8211; on a regular basis.<\/p>\n\n\n\n<p>This article contains my thoughts on what is missing, what can be improved, and why. These are ultimately my opinions and will differ from others who have <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/five-changes-to-sql-server-id-love-to-see\/\" target=\"_blank\" rel=\"noreferrer noopener\">pondered this<\/a> before me, and those who may do so in the future. As a T-SQL junkie, these hopes and dreams skew towards the T-SQL surface area. <\/p>\n\n\n\n<p>Hopefully, when we look back on this in a few years, checkmarks can be placed next to some of these requests!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-before-we-begin-a-quick-note-on-compatibility\">Before we begin: a quick note on compatibility<\/h3>\n\n\n\n<p>SQL Server and T-SQL are large and ever-evolving platforms. Microsoft is thorough in documenting compatibility with different products, as well as with <a href=\"https:\/\/www.ansi.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">ANSI<\/a> standards. If you&#8217;re interested in learning more about these details, grab a (large) cup of coffee and check out their docs <a href=\"https:\/\/learn.microsoft.com\/en-us\/openspecs\/standards_support\/MS-STDSUPLP\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>Because of this, T-SQL supports a whole lot of different syntaxes, providing many different ways to solve most problems. There are also many features that are deprecated or maintained solely for backwards-compatibility. When choosing a solution, there&#8217;s value in picking one that&#8217;s currently supported (and will be so for the foreseeable future.)<\/p>\n\n\n\n<p>Now, onto the list!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wish-1-import-from-compressed-file-formats\">Wish #1: Import from compressed file formats<\/h2>\n\n\n\n<p>Moving data around for <a href=\"https:\/\/www.red-gate.com\/simple-talk\/data-analytics\/\" target=\"_blank\" rel=\"noreferrer noopener\">analytics<\/a>, reporting, or <a href=\"https:\/\/www.ibm.com\/think\/topics\/machine-learning\" target=\"_blank\" rel=\"noreferrer noopener\">machine learning\/AI<\/a> can be a hassle. This sort of analytic data can get quite large and the file formats I want to store it in are the ones that are as small and efficient as possible. Compression is key here, so <a href=\"https:\/\/en.wikipedia.org\/wiki\/Comma-separated_values\" target=\"_blank\" rel=\"noreferrer noopener\">CSV<\/a> and Excel are not the formats I really want to deal with. <\/p>\n\n\n\n<p>There&#8217;s no need for bells and whistles: data will be written to files once, moved around, and then imported into SQL Server. Any downstream operations will benefit from smaller file sizes. Additionally, less computing resources will be needed overall to manage these files. This is especially true if files are to be copied, moved, archived, or ingested by multiple systems.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-compatibility-with-other-systems\">Compatibility with other systems<\/h3>\n\n\n\n<p>For maximum compatibility with other systems &#8211; such as Synapse, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/data-analytics\/microsoft-fabric\/\" target=\"_blank\" rel=\"noreferrer noopener\">Fabric<\/a>, or other data warehouses\/data lakes &#8211; the <a href=\"https:\/\/www.red-gate.com\/simple-talk\/development\/python\/incrementally-loading-data-into-parquet-with-python\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Parquet<\/a> file format is ideal. There are other highly compressed file formats out there that provide different optimizations and more features &#8211; the likes of <a href=\"https:\/\/aws.amazon.com\/what-is\/apache-iceberg\/\" target=\"_blank\" rel=\"noreferrer noopener\">Iceberg<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_ORC\" target=\"_blank\" rel=\"noreferrer noopener\">ORC<\/a>, <a href=\"https:\/\/delta.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Delta Lake<\/a>, or <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_Avro\" target=\"_blank\" rel=\"noreferrer noopener\">Avro<\/a> &#8211; but these are designed to support transactional <a href=\"https:\/\/www.ibm.com\/docs\/en\/zos\/3.1.0?topic=entry-understanding-write-operation\" target=\"_blank\" rel=\"noreferrer noopener\">write operations<\/a>. Also, parquet files can be converted easily into Delta Lake or other formats if needed.<\/p>\n\n\n\n<div id=\"callout-block_f52cf28defb56ce65334fb199983eafa\" class=\"callout alignnone\">\n    <div class=\"child-last:mb-0 child-first:mt-0 bg-gray-50 dark:bg-gray-950 p-4xl my-3xl\">\n\n<p><strong>You may also be interested in:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/reading-and-writing-parquet-files-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reading and writing parquet files in SQL Server<\/a><\/p>\n\n<\/div>\n<\/div> \n\n\n<p>While <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/reading-and-writing-parquet-files-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">this article I wrote last year<\/a> was a fun experiment, it was a workaround, and I\u2019d love a native integration into <code>OPENROWSET<\/code> or <code>bcp<\/code> to be available natively in SQL Server. Azure has supported parquet files for quite a while now, so why not SQL Server?<\/p>\n\n\n\n<p>I&#8217;d love to be able to execute code like this:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \" >SELECT\n\u00a0 *\nFROM OPENROWSET(BULK N'D:\\MyDataFiles\\CritcalSalesData_06_03_2026.parquet',\nFORMAT = 'PARQUET') AS PARQUETDATA;<\/pre><\/div>\n\n\n\n<p>As a big bonus, parquet files already contain metadata about <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/guidelines-for-choosing-data-types\/\" target=\"_blank\" rel=\"noreferrer noopener\">column<\/a> and row structure. There is no need for format files, field terminators, code pages, and other minutia that occupy us when dealing with CSV or other plain text formats. Parquet includes details on data types, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/theory-and-design\/values-clause-building-tables-out-nothing\/\" target=\"_blank\" rel=\"noreferrer noopener\">values<\/a>, NULLability, row counts, and more! <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-does-this-mean-when-importing-parquet-files-the-benefits-explained\">What does this mean when importing parquet files? The benefits explained<\/h3>\n\n\n\n<p>This means that, when importing parquet files, many of the nightmares we&#8217;ve experienced in the past are avoided. This includes:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>What data type is each column?<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>Is it an <code>INT<\/code> or a string? <code>DATE<\/code> or <code>DATETIME<\/code>?<br><br><\/li>\n<\/ul>\n<\/div><\/li>\n\n\n\n<li>What are the length, scale, and precision for each column?<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>Is that a <code>VARCHAR(50)<\/code> or <code>VARCHAR(100)<\/code>? <code>DECIMAL(8,2)<\/code>, or <code>DECIMAL(10,4)<\/code>?<br><br><\/li>\n<\/ul>\n<\/div><\/li>\n\n\n\n<li>Will column values containing delimiters such as commas or apostrophes break my import?<br><br><\/li>\n\n\n\n<li>My 100 column format file needs updating\u2026<br><br><\/li>\n\n\n\n<li>Can a column be <code>NULL<\/code>?<\/li>\n<\/ul>\n<\/div>\n\n\n<p>This is the year 2026. Why does importing data sometimes feel like I am physically adjusting jumpers on an old hard drive? A descriptive metadata-driven file-format like parquet solves so many of the pain points that data engineers feel every day. The effort to implement this in SQL Server would not be immense.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wish-2-arrays\">Wish #2: Arrays<\/h2>\n\n\n\n<p>Arrays are an ANSI SQL standard data structure, familiar to software developers and anyone that has ever spent enough time in the mathematical world. At a high level, an array is a data type that can contain numbered elements.<\/p>\n\n\n\n<p>For example, a few simple examples of array creation in C# would look like this:<\/p>\n\n\n\n<p><code>int[] Top10CustomerIdList = new int[10];<\/code><\/p>\n\n\n\n<p>This code creates an array that will contain 10 integers. Once created, they can be given values:<\/p>\n\n\n\n<p><code>Top10CustomerIdList[0] = 561;<\/code><\/p>\n\n\n\n<p><code>Top10CustomerIdList[1] = 17;<\/code><\/p>\n\n\n\n<p><code>Top10CustomerIdList[2] = 280;<\/code><\/p>\n\n\n\n<p>Arrays can be multi-dimensional and thereby support far more involved mathematical and computational problems:<\/p>\n\n\n\n<p><code>int[,] CubeStats = {{17, 5, 16},{-5, 2, 19},{7, 0, 58}};<\/code><\/p>\n\n\n\n<p>The value at a given position in a two-dimensional array can be returned easily enough:<\/p>\n\n\n\n<p><code>Console.WriteLine(CubeStats[0, 1]);<\/code><\/p>\n\n\n\n<p>This would return the value at 0 (the first triplet) and 1 (the second value contained within), which would be the number 5.<\/p>\n\n\n\n<div id=\"callout-block_f52cf28defb56ce65334fb199983eafa\" class=\"callout alignnone\">\n    <div class=\"child-last:mb-0 child-first:mt-0 bg-gray-50 dark:bg-gray-950 p-4xl my-3xl\">\n\n<p><strong>You may also be interested in:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/www.red-gate.com\/simple-talk\/other\/c-via-java-arrays\/\" target=\"_blank\" rel=\"noreferrer noopener\">C# via Java: Arrays<\/a><\/p>\n\n<\/div>\n<\/div> \n\n\n<h3 class=\"wp-block-heading\" id=\"h-the-current-state-of-arrays-in-databases\">The current state of arrays in databases<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/postgresql\/\" target=\"_blank\" rel=\"noreferrer noopener\">PostgreSQL<\/a> has arrays implemented natively, usable in <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/exploring-scalar-solutions-to-complex-data-math\/\" target=\"_blank\" rel=\"noreferrer noopener\">scalar<\/a> or table-based operations. For example, a table can contain an array as one of its columns:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \" >CREATE TABLE OrderSummary (\nOrderId INTEGER SERIAL PRIMARY KEY,\nOrderDate DATE,\nOrderLabels VARCHAR(50) ARRAY[3]);<\/pre><\/div>\n\n\n\n<p>From here, any row within the table may have its <code>OrderLabels<\/code> column inserted to or adjusted for any of its three possible elements:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \" >INSERT INTO OrderSummary\nVALUES (\n'6\/3\/2026',\n'{\"Priority\", \"Gold\", \"Special\"}');\n\nUPDATE OrderSummary\n\tSET OrderLabels[1] = 'Silver'\nWHERE OrderId = 1;<\/pre><\/div>\n\n\n\n<p>While SQL Server does <em>not<\/em> support arrays, it&#8217;s not<em> too<\/em> difficult to fake them using tables, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/sql-server-sequence-basics\/\" target=\"_blank\" rel=\"noreferrer noopener\">sequences<\/a>, delimited strings, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/oracle-databases\/json-for-absolute-beginners-part-1-introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSON<\/a>, XML, or some other trickery. <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/vector-search-in-sql-server-vector_distance-vector_search-and-index-trade-offs\/\" target=\"_blank\" rel=\"noreferrer noopener\">Vectors<\/a> can also be used to store array-like data, so long as the contents are numeric data types. These solutions work, but are never quite the same, either in terms of usability or performance.<\/p>\n\n\n\n<p>My biggest complaint about the array replacements in SQL Server is that they are either prone to<a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/theory-and-design\/bad-data-and-dirty-databases\/\" target=\"_blank\" rel=\"noreferrer noopener\"> bad data<\/a>, perform poorly, or both. JSON, XML, and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/other\/de-duplicating-delimited-lists-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">delimited lists<\/a> are often used in place of arrays \u2013 especially multi-dimensional ones. Their weakness is that the actual data structures are not a native list of values, but a blob of text that also contains the values we want.<\/p>\n\n\n\n<p>Their primary purposes are different, too. JSON is the perfect solution to transmit an unstructured document between apps without the need to deconstruct or reconstruct it first. A delimited list makes the most sense when its original source is also a delimited list.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-why-arrays-should-be-added-to-sql-server\">Why arrays should be added to SQL Server<\/h3>\n\n\n\n<p>What are my top reasons for wanting arrays in SQL Server?<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>Native support for sets of objects in any number of dimensions.<br><br><\/li>\n\n\n\n<li>The ability to natively index an array-object to improve performance.<br><br><\/li>\n\n\n\n<li>The database engine automatically parses element data types\/sizes to ensure they fit correctly into the array.<br><br><\/li>\n\n\n\n<li>More effective for structured data than a blob of text.<\/li>\n<\/ul>\n<\/div>\n\n\n<p>Note that <a href=\"https:\/\/www.red-gate.com\/simple-talk\/opinion\/editorials\/how-to-learn-about-azure-sql\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure SQL Database<\/a> and SQL Server 2025+ support the <code><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/data-types\/vector-data-type?view=sql-server-ver17&amp;tabs=csharp\" target=\"_blank\" rel=\"noreferrer noopener\">VECTOR<\/a><\/code> data type. While there are similarities between arrays and vectors, they are not the same. Arrays are built for general support of element lists for any data types, whereas vectors are specialized for storing <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/ai-in-sql-server-2025-embeddings\/\" target=\"_blank\" rel=\"noreferrer noopener\">AI embeddings<\/a> and managing the strictly numeric data for sematic search models.<\/p>\n\n\n\n<p>Arrays take a bit of getting used to. Those who are not already familiar with how they work might find them awkward, but I sincerely hope they make their way to the Microsoft data platform in the future. They provide better, easier solutions to many common problems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wish-3-overlaps\">Wish #3: OVERLAPS<\/h2>\n\n\n\n<p>This predicate can be used when evaluating dates and times &#8211; returning <code>TRUE<\/code> if two time ranges overlap with each other, and <code>FALSE<\/code> if they do not. It&#8217;s a use-case that I find I need to evaluate more often than a younger version of me may have anticipated!<\/p>\n\n\n\n<p>For example, imagine that there was an outage of a software provider from 7:15-7:30 on June 3, 2026, and I wanted to find all <a href=\"https:\/\/blog.postman.com\/what-is-an-api-call\/\" target=\"_blank\" rel=\"noreferrer noopener\">API calls<\/a> that have any overlap in execution start\/end with the outage time. The basic syntax in PostgreSQL would look like this:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \" >SELECT\n\t*\nFROM APICalls\nWHERE (StartTime, EndTime) OVERLAPS ('6\/3\/2026 07:15:00', '6\/3\/2026 07:30:00');<\/pre><\/div>\n\n\n\n<p>Now compare that to the code required to get the same result in SQL Server:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \" >SELECT\n\t*\nFROM APICalls\nWHERE (StartTime &lt;= '6\/3\/2026 07:15:00' AND EndTime &gt;= '6\/3\/2026 07:30:00')\nOR (StartTime &gt;= '6\/3\/2026 07:15:00' AND EndTime &lt;= '6\/3\/2026 07:30:00')\nOR (StartTime &lt;= '6\/3\/2026 07:15:00' AND EndTime &gt;= '6\/3\/2026 07:15:00')\nOR (StartTime &lt;= '6\/3\/2026 07:30:00' AND EndTime &gt;= '6\/3\/2026 07:30:00');<\/pre><\/div>\n\n\n\n<p>This code handles four distinct scenarios:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>The API call began before the outage and ended after the outage was over<br><br><\/li>\n\n\n\n<li>The API call began during the outage and ended before the outage was over<br><br><\/li>\n\n\n\n<li>The API call began before the outage and ended after the outage began<br><br><\/li>\n\n\n\n<li>The API call began during the outage and ended after the outage was over<\/li>\n<\/ul>\n<\/div>\n\n\n<p>While there are a variety of different ways to code this, the versions without <code>OVERLAPS<\/code> are far more elaborate. More importantly, coding to cover all overlapping scenarios is mentally taxing &#8211; and where most mistakes creep in.<\/p>\n\n\n\n<p>Even when working with date tables to assist in performing complex <a href=\"https:\/\/www.red-gate.com\/simple-talk\/other\/some-date-math-fun\/\" target=\"_blank\" rel=\"noreferrer noopener\">date math<\/a>, I\u2019d rather have a built-in function that does exactly what I want, than need to cobble it together from a loosely-visualized graphic in my mind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wish-4-simplify-licensing-of-sql-server\">Wish #4: Simplify licensing of SQL Server<\/h2>\n\n\n\n<p>This is a SQL-Server-specific wish: please make licensing simpler! In Azure, things have a monthly cost that can be quantified and estimated based on hardware and software needs. For SQL Server <em>outside<\/em> of Azure SQL Database, however, licensing is complicated by the fact that there are many, many licensing models available. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-why-is-that-a-problem\">Why is that a problem?<\/h3>\n\n\n\n<p>As organizations grow, the number can get large quickly. The job of licensing SQL Server therefore becomes mission critical. Some of the most common questions asked include:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>Which licensing model should we use? Per-core? CAL? Something else?<br><br><\/li>\n\n\n\n<li>What is Software Assurance and how does it work?<br><br><\/li>\n\n\n\n<li>Does a subscription model make sense?<br><br><\/li>\n\n\n\n<li>Should licensing be determined by the virtual or physical host?<br><br><\/li>\n\n\n\n<li>When is it OK to use SQL Server Developer Edition?<br><br><\/li>\n\n\n\n<li>How do HA\/DR copies work? Are they licensed differently?<br><br><\/li>\n\n\n\n<li>Enterprise or Standard &#8211; which is the correct one to use?<br><br><\/li>\n\n\n\n<li>Can Azure Arc help?<br><br><\/li>\n\n\n\n<li>What is License Mobility?<br><br><\/li>\n\n\n\n<li>Do I need to hire a legal or technical contractor to deal with this for me?<\/li>\n<\/ul>\n<\/div>\n\n\n<p>That&#8217;s a LOT of complexity \u2013 and it&#8217;s only the tip of the iceberg! This leads to frequent licensing mistakes when organizations can easily pay far too much for their SQL Servers. Some companies under-license and are left in an awkward position when they are audited.<\/p>\n\n\n\n<section id=\"my-first-block-block_bf256ccba857325f117fa8515a2e0705\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Protect your data. Demonstrate compliance.<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            With Redgate, stay ahead of threats with real-time monitoring and alerts, protect sensitive data with automated discovery &#038; masking, and demonstrate compliance with traceability across every environment.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/solutions\/use-cases\/security-and-compliance\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Learn more: Protect your data. Demonstrate compliance.\">Learn more<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<p><\/p>\n\n\n\n<p>For more information on current licensing methodology from Microsoft, <a href=\"https:\/\/www.microsoft.com\/licensing\/guidance\/SQL\" target=\"_blank\" rel=\"noreferrer noopener\">these docs provide some quality reading<\/a>, assuming you have some leftover coffee from earlier on-hand!<\/p>\n\n\n\n<p>It seems like each time Microsoft makes changes to its licensing, the result is more confusion. Therefore, a HUGE wish I have is to see licensing simplified. It should be no more complex than spinning up an Azure SQL Database. For example, I can jump right into Azure and get an estimate on what a database will cost per month, just like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"577\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-12.png\" alt=\"\" class=\"wp-image-111504\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-12.png 939w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-12-300x184.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-12-768x472.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><\/figure>\n\n\n\n<p>Sure, I may not like the resulting price, but it\u2019s clear as I adjust the various levers and knobs in this calculator what the cost will look like.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wish-5-cloud-blob-storage-for-everything\">Wish #5: Cloud Blob Storage for everything<\/h2>\n\n\n\n<p>As a best practice, relational\/transactional data should reside in a <a href=\"https:\/\/db-engines.com\/en\/article\/Relational+DBMS\" target=\"_blank\" rel=\"noreferrer noopener\">relational\/transactional<\/a> database. Files should reside in file systems. In the ancient past, file systems implied hard drives attached to servers that were given drive letters. Those drives were monitored and managed not only so that space didn&#8217;t run out, but to maintain high availability (as much as the system allowed) throughout.<\/p>\n\n\n\n<p>The latter part of that description was where scalability and maintainability would become challenging. Drives fill up. Disks fail. Things breaking is a part of the world of hardware. It can&#8217;t be avoided. All hardware eventually fails &#8211; that\u2019s a general accepted truth in computing.<\/p>\n\n\n\n<p>Cloud storage fixed that. No longer do we need to carefully manage the nitty-gritty of storage ourselves &#8211; why not let Microsoft, Amazon, Google, and other cloud vendors deal with it for us?!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cloud-storage-in-sql-server-2025-improved-the-situation\">Cloud storage in SQL Server 2025 improved the situation<\/h3>\n\n\n\n<p>SQL Server 2025 brought with it the ability to back up a database to Azure Blob Storage and Amazon s3. This was a huge improvement as those storage targets are cheap and made for large files. Once there, backup files can be used, copied, moved, and managed in all the ways that files in a filesystem can be managed, with all of the maintainability benefits offered by cloud storage vendors.<\/p>\n\n\n\n<div id=\"callout-block_f52cf28defb56ce65334fb199983eafa\" class=\"callout alignnone\">\n    <div class=\"child-last:mb-0 child-first:mt-0 bg-gray-50 dark:bg-gray-950 p-4xl my-3xl\">\n\n<p><em>For more info on backing up databases to Amazon S3 or Microsoft Blob Storage, check out the official documentation <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/backup-restore\/sql-server-backup-to-url\" target=\"_blank\" rel=\"noreferrer noopener\">here <\/a>and <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/backup-restore\/sql-server-backup-to-url-s3-compatible-object-storage\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/em><\/p>\n\n<\/div>\n<\/div> \n\n\n<p>This was a good start &#8211; but what would be great would be for those cloud storage technologies to be able to be used for more database operations involving files. Here are my top requests.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cloud-storage-improvements-i-d-like-to-see-in-sql-server\">Cloud storage improvements I&#8217;d like to see in SQL Server<\/h3>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>Filestream-like storage to a cloud URL<br><br><\/li>\n\n\n\n<li>Log Shipping can use cloud-stored backup files for all of its needs<br><br><\/li>\n\n\n\n<li>Mirror backups automatically to secondary URLs<br><br><\/li>\n\n\n\n<li>Format files for <code>bcp<\/code>\/Bulk Insert can reside in a cloud URL<br><br><\/li>\n\n\n\n<li>Import and Export files from SQL Server via a cloud URL<br><br><\/li>\n\n\n\n<li>Anywhere else we interact with files via SQL<\/li>\n<\/ul>\n<\/div>\n\n\n<p>If a database is already hosted in the cloud, then these requests become simple ones. \u201cLet me connect to that storage right over there instead of this storage, PLEASE!\u201d<\/p>\n\n\n\n<p>Picture a scenario when I want to do something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"716\" height=\"830\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-13.png\" alt=\"An image showing Ed's example scenario: the 'Import Flat File' option is selected from a menu in SQL Server.\" class=\"wp-image-111505\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-13.png 716w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-13-259x300.png 259w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/figure>\n\n\n\n<p>My expectation is that I can load a file from any reasonable location available to this server:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"522\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-14.png\" alt=\"An image showing the next part of Ed's imaginary scenario. This time, it's simply an image of Ed's file search menu, and all the files he can potentially load into SQL Server.\" class=\"wp-image-111506\" srcset=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-14.png 939w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-14-300x167.png 300w, https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2026\/06\/image-14-768x427.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><\/figure>\n\n\n\n<p>Unfortunately, my choices include locally attached drives. For maintainability\u2019s sake, it would be far better for files, scripts, and other related content to be centralized in a single easily-accessible, secure cloud location. Hopefully, the trend started in Azure SQL Database &#8211; and then in SQL Server &#8211; continues, and storage targets become seen as a more unified surface area that includes URLs, Blob storage, and other commonly-used cloud solutions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sql-server-has-come-a-long-way-but-there-s-still-work-to-be-done\">SQL Server has come a long way, but there&#8217;s still work to be done<\/h2>\n\n\n\n<p><strong>SQL Server and T-SQL have come a long way. The gap between where the platform <em>is<\/em> and where it <em>could<\/em> be, however, is still real &#8211; and felt daily by developers and data engineers. <\/strong><\/p>\n\n\n\n<p>Native Parquet support would eliminate decades-worth of flat-file frustration in a single feature. Arrays would give developers a proper, performant alternative to the JSON and XML workarounds that have been patched into workflows for years. <code>OVERLAPS<\/code> would turn four-condition date logic into one readable line. Simpler licensing would remove a source of risk and confusion that no technical team should have to carry. And broader cloud storage integration would bring SQL Server&#8217;s file handling in line with the cloud-first world most teams already live in.<\/p>\n\n\n\n<p>Several of these requests already exist in competing platforms or adjacent Microsoft products. Let&#8217;s hope that, if I were to revisit this list in a few years, most of it has earned a checkmark.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-what-would-you-like-to-see-added-to-sql-server-do-you-agree-or-disagree-with-any-of-my-points-let-me-know-in-the-comments-below\">What would you like to see added to SQL Server? Do you agree or disagree with any of my points? Let me know in the comments below!<\/h4>\n\n\n\n<section id=\"my-first-block-block_996fd1d7c79bf334e8edb029507b720e\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Fast, reliable and consistent SQL Server development&#8230;<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            &#8230;with SQL Toolbelt Essentials. 10 ingeniously simple tools for accelerating development, reducing risk, and standardizing workflows.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/products\/sql-toolbelt-essentials\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Learn more &amp; try for free: Fast, reliable and consistent SQL Server development...\">Learn more &amp; try for free<\/a>\n                    <\/div>\n    <\/div>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>2026 T-SQL wish list covering native Parquet imports, arrays, OVERLAPS, simpler licensing, and cloud storage \u2014 features SQL Server still needs.&hellip;<\/p>\n","protected":false},"author":329827,"featured_media":108032,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143523,53,143524,143531],"tags":[4168,4170,4150,4151,4183,4252],"coauthors":[101655],"class_list":["post-111503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-databases","category-featured","category-sql-server","category-t-sql-programming-sql-server","tag-database","tag-database-administration","tag-sql","tag-sql-server","tag-t-sql","tag-t-sql-programming"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/111503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/329827"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=111503"}],"version-history":[{"count":5,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/111503\/revisions"}],"predecessor-version":[{"id":111516,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/111503\/revisions\/111516"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media\/108032"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=111503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=111503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=111503"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=111503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}