我知道这在Oracle中是可行的,我想知道SQL Server是否也支持它(搜索答案没有成功)。
如果我可以将表的一列定义为表本身,那么它将大大简化我在当前项目中的生活,例如:
Table A:
Column_1 Column_2
+----------+----------------------------------------+
| 1 | Columns_2_1 Column_2_2 |
| | +-------------+------------------+ |
| | | 'A' | 12345 | |
| | +-------------+------------------+ |
| | | 'B' | 777777 | |
| | +-------------+------------------+ |
| | | 'C' | 888888 | |
| | +-------------+------------------+ |
+----------+----------------------------------------+
| 2 | Columns_2_1 Column_2_2 |
| | +-------------+------------------+ |
| | | 'X' | 555555 | |
| | +-------------+------------------+ |
| | | 'Y' | 666666 | |
| | +-------------+------------------+ |
| | | 'Z' | 000001 | |
| | +-------------+------------------+ |
+----------+----------------------------------------+
提前致谢。
答案 0 :(得分:2)
有一个选项可以将数据存储为XML
Declare @YourTable table (ID int,XMLData xml)
Insert Into @YourTable values
(1,'<root><ID>1</ID><Active>1</Active><First_Name>John</First_Name><Last_Name>Smith</Last_Name><EMail>john.smith@email.com</EMail></root>')
,(2,'<root><ID>2</ID><Active>0</Active><First_Name>Jane</First_Name><Last_Name>Doe</Last_Name><EMail>jane.doe@email.com</EMail></root>')
Select ID
,Last_Name = XMLData.value('(root/Last_Name)[1]' ,'nvarchar(50)')
,First_Name = XMLData.value('(root/First_Name)[1]' ,'nvarchar(50)')
From @YourTable
返回
ID Last_Name First_Name
1 Smith John
2 Doe Jane
答案 1 :(得分:0)
实际上,对于规范化数据库,我们不需要这样的功能。 因为如果我们需要在列中插入一个表,那么我们可以创建一个子表并将其作为父表中的外键引用。
尽管如此,如果您仍然坚持使用此类功能,则可以使用SQL Server 2016来支持JSON数据,您可以在其中存储JSON格式的任何关联列表。 像:
DECLARE @json NVARCHAR(4000)
SET @json =
N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}'
SELECT
JSON_VALUE(@json, '$.type') as type,
JSON_VALUE(@json, '$.info.address.town') as town,
JSON_QUERY(@json, '$.info.tags') as tags
SELECT value
FROM OPENJSON(@json, '$.info.tags')
在旧版本中,这可以通过xml实现,如上一个答案中所示。
您也可以使用“sql_variant”数据类型映射表格。
以前,我也在寻找Oracle提供的功能。但在阅读了专家的各种文章和博客之后,我确信,这些功能会使事情变得更加复杂。 仅以所需格式存储数据并不重要,当它也有效可用(可读)时是值得的。
希望这会帮助您做出决定。