我有一个包含多个表的数据库,这些表共享几个公共字段(ID(Guid),Title,ParentID(Guid)),但是它们中的任何一个都可以有特定于表的字段。
是否可以在这些表上创建UNIONs的视图并输出第四列,该列是键值对的JSON表示,表示除3个常用字段之外的所有其他字段的列名和值?然后,Web应用程序将使用该字段的值。它不必是JSON,它可以是XML,逗号分隔,但基本上应该代表一个或多个字段的字段名/值配对,这些字段在工会表之间不常见。
澄清。采用以下两个表模式
Table1
ID Title ParentID ABooleanField AnIntegerField
1 A Parent NULL True 50
2 A Child 1 False 100
Table2
ID Title ParentID ADateField
3 AnotherParent NULL 10/12/2014
然后,视图将输出为
ID Title ParentID Uncommon
1 A Parent NULL ABooleanField:True,AnIntegerField:50
2 A Child 1 ABooleanField:False,AnIntegerField:100
3 AnotherParent NULL ADateField:10/12/2014
ID实际上是GUID,Uncommon字段是NVARCHAR(MAX)
干杯
斯图尔特
答案 0 :(得分:0)
让我们说这是你的
CREATE TABLE table1 (id int, Title nvarchar(100), ParentID int, ABooleanField varchar(10), AnIntegerField int)
INSERT table1 VALUES (1, 'A Parent', null, 'true', 50), (2, 'A Child', 1, 'false', 100)
CREATE TABLE table2 (id int, Title nvarchar(100), ParentID int, ADateField varchar(100))
INSERT table2 VALUES (1, 'AnotherParent ', null, '10/12/2014')
这是
SELECT id
,Title
,ParentID
,(
SELECT STUFF((
SELECT ',"ABooleanField": ' + ABooleanField + ',"AnIntegerField":' + cast(AnIntegerField AS VARCHAR(20))
FOR XML path('')
,type
).value('.', 'varchar(max)'), 1, 1, '')
) AS 'KeyValPair'
FROM table1
UNION ALL
SELECT id
,Title
,ParentID
,(
SELECT STUFF((
SELECT ',"ADateField": ' + ADateField
FOR XML path('')
,type
).value('.', 'varchar(max)'), 1, 1, '')
) AS 'KeyValPair'
FROM table2
您也可以在SQL Fiddle for that中查看。
ID Title ParentID KeyValPair
1 A Parent Null ABooleanField: true, AnIntegerField:50
2 A Child 1 ABooleanField: false, AnIntegerField:100
3 AnotherParent Null ADateField: 10/12/2014