It's not PIVOT
that is case sensitive, it's the data returned from OPENJSON
that is. If you check the data returned from it, you'll see that the column key
is a binary collation:
SELECT name, system_type_name, collation_name
FROM sys.dm_exec_describe_first_result_set(N'SELECT [key], CONVERT(varchar, [value]) AS [value] FROM OPENJSON(''{"Name":"tew","TabTypeId":9,"Type":3}'');',NULL,NULL)
name |
system_type_name |
collation_name |
key |
nvarchar(4000) |
Latin1_General_BIN2 |
value |
varchar(30) |
SQL_Latin1_General_CP1_CI_AS |
For binary collations the actual bytes of the characters must match. As such N'tabTypeId'
and N'TabTypeId'
are not equal as N'T'
and N't'
have the binary
values 0x5400
and 0x7400
.
Though I am unsure why you are using PIVOT
at all; just define your columns in your OPENJSON
call:
SELECT name, --Columns are intentionally demonstrating non-case sensitivity
tabTypeId,
type
FROM OPENJSON('{"Name":"tew","TabTypeId":9,"Type":3}')
WITH (Name varchar(3),
TabTypeId int,
Type int);
Note that in the WITH
clause of OPENJSON
the column names are still case sensitive. tabTypeId int
would also yield NULL
. If you "had" to have a column called tabTypeId
defined prior to the SELECT
you would use tabTypeId int '$.TabTypeId'
instead.