我有一个数据库,其中包含多个表,这些表共享多个公共字段(ID(Guid)、Title、ParentID(Guid)),但其中任何一个都可以具有特定于表的字段。
是否可以创建一个视图,在这些表上使用UNION并输出第四列,该列是键值对的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
然后View会将其输出为
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)
干杯
Stewart
假设这是您的
模式
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
您也可以在SQLFiddle中查看。
输出
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