Approximate Count in MS SQL using APPROX_COUNT_DISTINCT
- There is a case when we want to get the unique number of non-NULL values in one table column. Before MS SQL 2019 to accomplish this task, we could use the COUNT(DISTINCT([Column_Name])) syntax. For larger tables this approach can generate noticeable performance problems. MS SQL 2019 introduced us the APPROX_COUNT_DISTINCT function that approximates the count within a 2% precision to the actual value but at a fraction of the time and with noticeable decrease of used resources (memory and CPU).
AT TIME ZONE
- MS SQL AT TIME ZONE was introduced in MS SQL version 2016 and the main purpose is to convert an inputdate to the corresponding datetimeoffset value in the target time zone.
COMPRESS AND DECOMPRESS
- MS SQL COMPRESS and DECOMPRESS are introduced into MS SQL version 2016. In this post we will read the overview of both functions, limitations and benefits. We will also test the performance compared to ROW and PAGE compression methods.
CONCAT vs CONCAT_WS
- SQL Server function CONCAT is introduced in MS SQL version 2012. Simple as that it returns a string that is the result of concatenating two or more string values. Let’s compare it with the new function CONCAT_WS which is introduced in MS SQL Server 2017.
CREATE OR ALTER
- CREATE OR ALTER is a new MS SQL Server syntax extension introduced from MS SQL Server 2016. Read more about it in this post.
- In short, introduced in MS SQL 2016, DATEDIFF_BIG is almost the same function as DATEDIFF starting from MS SQL 2008 that is commonly used already. So, let’s see how and for what is used and what are the benefits.
DROP IF EXISTS (a.k.a. DIE)
- DROP IF EXISTS is a new MS SQL Server syntax extension introduced from MS SQL Server 2016. Read more about it in this post.
Format MS SQL data in JSON format
- Prior to MS SQL server 2016 manipulating data in JSON format was not supported and sometimes a challenging task, forcing us to implement third party solutions (e.g. CLR). In this article we will see how we can create JSON objects from MS SQL data.
- Read more about MS SQL FORMATMESSAGE function introduced in MS SQL 2016. Find samples and explanations. Let's find how to use it and what has in common with the C# String.Format() method.
HASHBYTES - Hashing in MS SQL Server
- In short words, hashing is a process of generating a value or values from a string of text using a mathematical function. Let's see the usage of the MS SQL function HASHBYTES witch purpose is to hash values. MS SQL function HASHBYTES was introduced in MS SQL version 2005 supporting MD2, MD4, MD5, SHA, SHA1 hashing algorithms. From MS SQL server version 2012 additionally the SHA2_256, SHA2_512 algorithms were introduced. In this article we will discuss about hashing, what's new from SQL 2016 and see some usage examples.
Historical data with MS SQL System-Versioned (Temporal) Tables
- Before the existence of system-versioned temporal tables, tracking changes in a database table forced us to implement some custom solutions based on triggers, stored procedures etc. System-versioned temporal tables offer us the possibility to keep a full history of data changes and allowing us easy point in time analysis. Using this solution, we can easily time travel through the data and see what the exact state of the data in a point of time was.
Install MS SQL on Linux (Ubuntu)
- With basic Linux knowledge let’s try to step by step install MS SQL Server on a Linux server (Ubuntu).
JSON functions, tips & tricks
- After discussing about how MS SQL Server can help us to format MS SQL data in JSON format and how to read JSON data in MS SQL Server, in this article we will quickly pass over some additional functions, tips and tricks and possibilities handling JSON data in MS SQL Server.
Modify JSON data using JSON_MODIFY
- After discussing about how MS SQL Server can help us to format MS SQL data in JSON format and how to read JSON data in MS SQL Server, in this article we will see how we can modify JSON data in MS SQL Server using JSON_MODIFY function.
Read JSON data in MS SQL
- Starting from MS SQL server 2016 you can convert JSON data to tabular format. It is possible using the newly introduced OPENJSON rowset function. Let’s find how!
Scalar UDF are (not) evil? - SQL 2019
- Sometimes using user defined functions (before SQL 2019) could lead us to performance problems. Let’s see how the usage of UDF performs in SQL 2019 and in earlier versions.
SQL Advice - COUNT(*) vs EXISTS
- If you want to check for data existence in a table (e.g. if there are invoices on a concrete date) you could use COUNT(*) or the EXISTS statement. I found various theories on the internet and even in some SQL books what is the best approach, so I decided to test this by myself (spoiler alert: the books are on the side of using EXISTS).
SQL Advice - Use constraints
- Why you should use constraints on your tables? Except the fact that you should use constraints to check your data and the integrity of them (e.g. only allow inserting of numeric value between 1 and 5 for storing vote value) you could use them also for better query executions and get some performance boost. Let’s find how.
String or binary data would be truncated
- Let’s find out how MS SQL 2019 handles the problem that generates the commonly known error “String or binary data would be truncated”.
- In this post we will learn something about MS SQL STRING_AGG function introduced in MS SQL version 2017 for string aggregation, how we did it before and test its performance compared to the old way.
- MS SQL STRING_ESCAPE introduced in MS SQL 2016 escapes special characters in texts and returns text with escaped characters.
- Let's talk about MS SQL STRING_SPLIT table-valued function introduced in MS SQL version 2016 for splitting string values by a separator. How we did it before and test its performance compared to the old way. We will also see the pros but also cons of the function.
- Read more about MS SQL TRANSLATE function introduced in MS SQL 2017. Find samples and explanations.
- TRIM is a new MS SQL Server function introduced from MS SQL Server 2017. It removes space characters from both sides (at the beginning/left and at the end/right) of the given string value. You can read more in this post.
SQL Basics (SQL 4 beginners)
- Alias is a shorten name for a table (sometime even a function) that can be used in queries.
- Let’s find out what is a JOIN and how to use it. The main difference between JOIN and UNION operator is that union combines results vertically, while the JOIN combines result's horizontally. There are different types of JOIN-s depending on the business need and we will discuss about them. Since the databases should be normalized it is essential to use joins to get details for some records.
- A database key provides the possibility to identify, access and update information in a database table. A key is a single field (column) or combination of multiple fields. Its purpose is to access or retrieve data rows from table according to the requirement. The keys are defined in tables to access or sequence the stored data quickly and smoothly. They are also used to create links between different tables.
- Database normalization is a process used to organize a database into tables and columns. The idea is that a table should be about a specific topic and that and only supporting topics included. Normalization is a systematic approach of decomposing tables to eliminate data redundancy.
- When talking about values in database world there are three possible states. The three states are: there is a value, there is not a value (empty) and the value is NULL (unknown). Let's find out more about the NULL value.
- Let’s find out what is a UNION and what’s the difference between the UNION and the UNION ALL operators. The main difference between UNION and JOIN operator is that union combines results vertically. In simple words, the UNION operator returns results from two or more queries in one result set.
- A database View is nothing else than a stored query! When you create a database view (CREATE VIEW), the database engine stores the input query and give him a specified name. When you query the view, the database engine take the stored definition of the query and execute it with added statements by you (e.g. ORDER BY, WHERE, etc.) and execute it.