2016-05-26 30 views
-1

Ist es möglich, einen benutzerdefinierten Tabellentyp innerhalb eines anderen benutzerdefinierten Tabellentyps in SQL zu verwenden (verschachtelte Benutzerdefiniert Tabellentypen)?Kann ein benutzerdefinierter Tabellentyp innerhalb eines anderen benutzerdefinierten Tabellentyps verwendet werden? Sql

CREATE TYPE A AS TABLE 
(
    A_Id int 
) 

GO 


CREATE TYPE B AS TABLE 
(
    B_Id int, 
    A_Id A --Need To Use A as data type in B 
) 
GO 

Ich habe Senior, um die Datentabelle der Zeilen mit in einer Tabelle zu senden.

Table 
1.Item1 
    1.Vendor1 
    2.Vendor2 
2.Item1 
    1.Vendor1 
    2.Vendor2 

Bitte helfen, wie die Tabellendaten in Tabellenzeilen von asp.net senden to SQL. durchschleifen oder gibt es eine einfache Möglichkeit, die verschachtelten Tabellendaten an den Server zu senden.

+2

Haben Sie versucht, etwas? Oder einfach nur fragen? – shadow

+0

Das Konzept davon bricht 1NF. Sie würden eine ganze Tabelle in einem einzigen Tupel speichern. Das widerspricht dem gesamten Konzept der Beziehungsdaten. Und die Aufführung von so etwas wäre unglaublich schlecht. Überlegen Sie, was passieren würde, wenn Sie mit mehreren Ebenen verschachteln. Pfui. –

+0

Vielleicht möchten Sie [meine Antwort auf ein ähnliches Problem] (http://stackoverflow.com/a/34832231/3094533) lesen. –

Antwort

4

Nein. Warum sollte es sein? So funktioniert SQL Server (oder irgendeine andere relationale Datenbank) nicht.

Von TechNet's page on User-Defined Table Types:

Einschränkungen

Benutzerdefinierte Tabellentypen haben die folgenden Einschränkungen:

  • Ein benutzerdefinierter Tabellentyp nicht als eine Spalte in einer Tabelle verwendet werden kann, oder ein Feld in einem strukturierten benutzerdefinierten Typ.

„Nesting“ in relationalen Datenbanken werden von Foreign keys

mit erreichen Sie können nicht einmal einen Fremdschlüssel zwischen zwei benutzerdefinierten Tabellentypen erstellen.

Was Sie tun können, ist zwei Tabellentypen erstellen, die einer von ihnen eine Spalte, die ID des anderen zu halten, wie folgt aus:

CREATE TYPE A AS TABLE 
(
    A_Id int 
) 

GO 


CREATE TYPE B AS TABLE 
(
    B_Id int, 
    A_Id int -- "FK" 
) 
GO 
+1

Ich denke StackOverflow ist einfacher als TechNet oder MSDN. – shadow

+0

Normalerweise würde ich nicht stören, aber ich dachte darüber nach, was Verschachtelung in diesen Situationen bedeutet, also habe ich versucht, eine Fremdschlüsseleinschränkung zwischen 2 Tabellentypen zu erstellen und konnte nicht. Ich denke, es gibt einen Grund dafür. –

+0

TYPE A AS CREATE TABLE ( A_Id int ) GO TYPE B als CREATE TABLE ( B_Id int, A_Id A --Need A in B als Datentyp verwenden ) –