メモ:T-SQL 単一列の結果表をシンプルな JsonArray にしたい

create table [データ] (
  [Id] bigint not null identity(1, 1) primary key
  , [Name] nvarchar(20) not null
)
go
insert into [データ] ([Name]) values 
(N'あいうえお')
, (N'かきくけこ')

から

["あいうえお", "かきくけこ"]

にしたい場合のクエリ。

参考 SQL to JSON - array of objects to array of values in SQL 2016 - Stack Overflow

単純に for json だとダメ。

select [Name] from [データ] for json path
[{"Name":"あいうえお"},{"Name":"かきくけこ"}]

結果セットの行が配列の要素(object)になってしまう。
ojbect じゃなくて良ーんだよってことで、色々やります。

まず、'"' で囲って、 区切りの','付けて for xml で1行にまとめてしまう。

select concat(',', '"', [Name], '"') from [データ] for xml path('')
,"あいうえお","かきくけこ"

で、STUFF (Transact-SQL) - SQL Server | Microsoft Docs で 先頭の ',' を取る。

select stuff(
  (select concat(',', '"', [Name], '"') from [データ] for xml path(''))
  , 1, 1, '')
"あいうえお","かきくけこ"

後は、前後に '['、']' 付けたらOK!

select concat('[', stuff(
  (select concat(',', '"', [Name], '"') from [データ] for xml path(''))
  , 1, 1, ''), ']')
["あいうえお","かきくけこ"]

SQL Server 標準の JSON 機能使ってない?
では、正しい JSON かどうかだけチェックしときます。
JSON_QUERY (Transact-SQL) - SQL Server | Microsoft Docs

select json_query((select concat('[', stuff(
  (select concat(',', '"', [Name], '"') from [データ] for xml path(''))
  , 1, 1, ''), ']')))
["あいうえお","かきくけこ"]

JSON 機能素晴らしい?!