2016-05-26 3 views
-1

Возможно ли использовать определенный пользователем тип таблицы внутри другого определенного типа таблицы в SQL (типы вложенных пользователей определяют типы таблиц).Возможно ли использовать определенный пользователем тип таблицы внутри другого определенного пользователем типа таблицы в 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 

У меня есть старший, чтобы отправить таблицу данных строк в таблице.

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

Пожалуйста, помогите, как отправить данные таблицы в строках таблицы из asp.net в SQL. через цикл или есть простой способ отправить вложенные данные таблицы на сервер.

+2

вы пробовали что-нибудь? Или просто спрашивать? – shadow

+0

Концепция этого ломается 1NF. Вы будете хранить всю таблицу в одном кортеже. Это просто бросает вызов всей концепции данных отношений. И выполнение чего-то подобного было бы невероятно плохим. Подумайте, что произойдет, если вы начнете вложенное с несколькими уровнями. Тьфу. –

+0

Возможно, вы захотите прочитать [мой ответ на аналогичную проблему] (http://stackoverflow.com/a/34832231/3094533). –

ответ

4

Нет. Почему это должно быть? Это не так работает SQL Server (или любая реляционная база данных, если на то пошло).

От TechNet's page on User-Defined Table Types:

Ограничения

определяемые пользователем типы таблиц имеют следующие ограничения:

  • определенный пользователем тип таблицы не может быть использован в качестве столбца в таблице или a в структурированном пользовательском типе.

«вложенности» в реляционных базах данных достигается за счет использования Foreign keys

Вы не можете даже создать ограничение внешнего ключа между двумя заданными пользователем типами таблиц.

Что вы можете сделать, это создать типы две таблицы, которые один из них имеют столбец, чтобы сохранить идентификатор другого, как это:

CREATE TYPE A AS TABLE 
(
    A_Id int 
) 

GO 


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

Я думаю, что StackOverflow проще, чем TechNet или MSDN. – shadow

+0

Обычно я бы не стал беспокоиться, но я подумал о том, что такое вложение в таких ситуациях, поэтому я попытался создать ограничение внешнего ключа между двумя типами таблиц и не смог. Я думаю, есть причина. –

+0

CREATE TYPE A в виде таблицы ( A_ID INT ) GO CREATE TYPE B в виде таблицы ( B_Id INT, A_ID --потребность использовать как тип данных в B ) GO –

Смежные вопросы