Skip to content

Instantly share code, notes, and snippets.

This file has been truncated, but you can view the full file.
DROP TABLE IF EXISTS dbo.XmlVsJSON2
CREATE TABLE dbo.XmlVsJson2
(
Id INT IDENTITY PRIMARY KEY,
XmlData XML,
JsonData NVARCHAR(MAX)
)
This file has been truncated, but you can view the full file.
USE Sandbox;
DROP TABLE IF EXISTS dbo.XmlVsJSON
CREATE TABLE dbo.XmlVsJson
(
Id INT IDENTITY PRIMARY KEY,
XmlData XML,
JsonData NVARCHAR(MAX)
)
@bertwagner
bertwagner / SQL to JSON datetime modifications.sql
Last active March 29, 2017 10:35
SQL to JSON datetime modifications
DECLARE @sqlDate datetime2 = '2017-03-28 12:45:00.1234567'
DECLARE @jsonData nvarchar(max) = N'{ "createDate" : "2017-03-28T12:45:00.000Z" }'
,@newDate datetime2(3) = '2017-03-28T12:48:00.123Z'
-- Let's start out modifying our data by replacing the value completely
SELECT JSON_VALUE(@jsonData, '$.createDate')
@bertwagner
bertwagner / SQL to JSON datetime queries.sql
Last active March 23, 2017 22:02
SQL to JSON datetime conversion queries
DECLARE @sqlData datetime2 = '2017-03-28 12:45:00.1234567'
-- Let's first try the simplest SQL to JSON conversion first using FOR JSON PATH
SELECT @sqlData as SQLDateTime2 FOR JSON PATH
-- Output: [{"SQLDateTime2":"2017-03-28T12:45:00"}]
-- Honestly that's not too bad!
-- The datetime gets created in the YYYY-MM-DDTHH:MM:SS.fffffff format
-- Although this is pretty much what we need, what if we want to be explicit and specify that we are in UTC?
-- Just add the AT TIME ZONE modifier and we will get our JSON "Z" indicating UTC
@bertwagner
bertwagner / JSON date time in SQL .sql
Last active January 26, 2023 20:30
JSON date times converting to SQL data types
DECLARE @jsonData nvarchar(max) = N'{ "createDate" : "2017-03-28T12:45:00.000Z" }'
-- SQL's JSON_VALUE() will read in the JSON date time as a string
SELECT JSON_VALUE(@jsonData, '$.createDate')
-- Output: 2017-03-28T12:45:00Z
-- If we want to read it in as a SQL datetime2, we need to use a CONVERT() (or a CAST())
SELECT CONVERT(datetime2, JSON_VALUE(@jsonData, '$.createDate'))
-- Output: 2017-03-28 12:45:00.0000000
@bertwagner
bertwagner / Json.NET performance test script.cs
Created February 20, 2017 00:45
Comparing performance between SQL Server 2016 and Json.Net JSON parsing
static void Main(string[] args)
{
string cars = @"[ {""year"":2001,""make"":""ACURA"",""model"":""CL""}, ... ]";
Stopwatch stopwatch = new Stopwatch();
// Test #1
stopwatch.Start();
var deserializedCars = JsonConvert.DeserializeObject<IEnumerable<Car>>(cars);
stopwatch.Stop();
long elapsedMillisecondsDeserialize = stopwatch.ElapsedMilliseconds;
@bertwagner
bertwagner / SQL JSON performance comparison with Json.Net.sql
Last active February 20, 2017 17:21
Comparing performance of SQL Server 2016 vs Json.Net
-- Turn on stats and see how long it takes to parse the ~20k JSON array elements
SET STATISTICS TIME ON
-- Test #1
-- Test how long it takes to parse each property from all ~20k elements from the JSON array
-- SQL returns this query in ~546ms
SELECT JSON_VALUE(value, '$.year') AS [Year], JSON_VALUE(value, '$.make') AS Make, JSON_VALUE(value, '$.model') AS Model FROM OPENJSON(@cars, '$')
-- Test #2
-- Time to deserialize and query just Golfs without computed column + index
@bertwagner
bertwagner / SQL 2016 indexed computed performance.sql
Last active February 20, 2017 17:24
SQL Server 2016 reutrns data in 1ms for indexed computed column
-- Indexed computed column returns results in ~1ms
SELECT * FROM dbo.Cars WHERE CarModel = 'Golf'
@bertwagner
bertwagner / SQL pre2016 JSON performance.sql
Created February 19, 2017 14:29
Parsing JSON in pre-2016 SQL Server
-- Let's compare how quick Phil Factor's JSON parsing function does against the new SQL 2016 functions
-- Phil's parseJSON function can be downloaded from https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/
SELECT years.StringValue AS Year, makes.StringValue AS Make, models.StringValue AS Model FROM dbo.parseJSON(@cars) models
INNER JOIN dbo.parseJSON(@cars) years ON models.parent_ID = years.parent_ID
INNER JOIN dbo.parseJSON(@cars) makes ON models.parent_ID = makes.parent_ID
WHERE models.NAME = 'model' AND models.StringValue = 'Golf' AND years.NAME = 'year' AND makes.NAME = 'make'
@bertwagner
bertwagner / JSON SQL Index performance.sql
Last active February 20, 2017 17:10
Adding a nonclustered index to our computed column
-- Add an index onto our computed column
CREATE CLUSTERED INDEX CL_CarModel ON dbo.Cars (CarModel)
-- Check the execution plans again
SELECT DISTINCT * FROM dbo.Cars WHERE JSON_VALUE(CarDetails, '$.model') = 'Golf'
SELECT DISTINCT * FROM dbo.Cars WHERE CarModel = 'Golf'
-- We now get index seeks!