这可能是一个难以正确提问的问题。我的想法是,我有一个具有可能导致json对象的模式的东西:
{ id:1, x:1, y:1, type:"map" settings: {... those settings for type "map" ...}}
每个字段id, x, y, type
都直接来自表格中的列。我想要的是获取type
“map”的字符串,并在Map_Settings表中查找属性中的那些属性。
我也可以有一个实例:
{ id:1, x:1, y:1, type:"graph" settings: {... those settings for type "map" ...}}
其中type
不同。因此,将引用Graph_Settings表。
如何编写查询来执行此操作?
答案 0 :(得分:0)
我不确定如何让SQL Server生成JSON,但是你可以在XML中生成类似的东西。也许有一种方法可以将XML转换为JSON ..
我假设您的架构是这样的:
CREATE TABLE [Thing]
(
[id] INT,
[x] INT,
[y] INT,
[type] VARCHAR(10)
)
CREATE TABLE [Map_Settings]
(
[Thing_id] INT,
[MapSetting1] INT,
[MapSetting2] INT
)
CREATE TABLE [Graph_Settings]
(
[Thing_id] INT,
[GraphSetting3] INT,
[GraphSetting4] INT
)
一些数据:
INSERT [Thing] VALUES (1, 1, 1, 'map'), (2, 1, 1, 'graph')
INSERT [Map_Settings] VALUES (1, 0, 0)
INSERT [Graph_Settings] VALUES (2, 0, 0)
生成XML的查询:
SELECT
thing.id AS [@id],
thing.[x] AS [@x],
thing.[y] AS [@y],
thing.[type] AS [@type],
CASE thing.[type]
WHEN 'map' THEN
(
SELECT [MapSetting1] AS [@mapsetting1], [MapSetting2] AS [@mapsetting2]
FROM [Map_Settings] ms
WHERE ms.[Thing_id] = thing.[id]
FOR XML PATH ('settings'), TYPE
)
WHEN 'graph' THEN
(
SELECT [GraphSetting3] AS [@graphsetting3], [GraphSetting4] AS [@graphsetting4]
FROM [Graph_Settings] gs
WHERE gs.[Thing_id] = thing.[id]
FOR XML PATH ('settings'), TYPE
)
END
FROM [Thing] thing
FOR XML PATH ('Thing')
输出:
<Thing id="1" x="1" y="1" type="map">
<settings mapsetting1="0" mapsetting2="0" />
</Thing>
<Thing id="2" x="1" y="1" type="graph">
<settings graphsetting3="0" graphsetting4="0" />
</Thing>
这有帮助吗?