2017-01-25 6 views
0

私はこれがOracleで可能であることを知っています.SQL Serverでもサポートされているのかどうかは疑問です。事前に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  | | 
|   | +-------------+------------------+ | 
+----------+----------------------------------------+ 

ありがとう:私はテーブル自体、のようなものにするために、テーブルの列を定義することができれば

それが大幅に現在のプロジェクトで私の人生を簡素化します。

+3

通常、ネストしたテーブルと呼ばれ、SQL Serverはそれらをサポートしていません。 SQL Serverのネストされたテーブルを検索すると、回避策に関する多くのリソースが見つかります。 –

+0

いいえ.Damien_The_Unbelieverがコメントに書いたとおり、SQL Serverはネストしたテーブルをサポートしていません。代わりに、メインテーブルとセカンダリテーブルの間に外部キーを使用できます。 –

+0

@Damien_The_Unbeliever、確かに、_ _ネストされたテーブル_ **。まあ...私はそれがOracle ... Pityになるだろうともっと努力すると思う。 – FDavidov

答えて

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>[email protected]</EMail></root>') 
,(2,'<root><ID>2</ID><Active>0</Active><First_Name>Jane</First_Name><Last_Name>Doe</Last_Name><EMail>[email protected]</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 
+0

ジョンに感謝しますが、これは私が望むものではありません。私は** REAL **テーブルを探しています。 – FDavidov

+0

@FDavidovコメントで見たように、それは機能ではありません。持っているといいですね。 –

+0

明らかに、ORACLEの開発者はこれを許可するとよいと考えていました(実際には、ORACLEでは、ユーザー定義型を含む事前定義された型の表列を使用できます)。とにかく、試みと提案に感謝します。 – FDavidov

0

、などのデータを保存することができます一つの選択肢があります。 カラム内にテーブルを挿入する必要がある場合は、子テーブルを作成し、それを親テーブルの外部キーとして参照することができます。

でも、JSON形式の任意の結合リストを格納できるJSONデータをSQL Server 2016を使用してサポートすることができます。 ように:前の回答に示すように、古いバージョンでは

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で利用可能な機能を探していました。しかし、専門家からさまざまな記事やブログを読んだ後で、そのような機能は物事をより複雑にすると確信していました。 データを必要な形式で保存するだけでなく、効率的に利用できる(読み取り可能な)場合にも適しています。

希望すると、あなたの決定を下すのに役立ちます。

関連する問題