Можно ли использовать определенный пользователем тип таблицы внутри другого пользовательского типа таблицы в 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. через цикл или есть какой-либо простой способ отправить данные вложенной таблицы на сервер.


person Pradeep Kolli    schedule 26.05.2016    source источник
comment
Вы что-нибудь пробовали? Или просто спрашиваю?   -  person shadow    schedule 26.05.2016
comment
Концепция этого ломает 1НФ. Вы бы сохранили всю таблицу в одном кортеже. Это просто противоречит всей концепции данных отношения. И исполнение чего-то подобного было бы невероятно плохим. Подумайте, что произойдет, если вы начнете многоуровневое вложение. Фу.   -  person Sean Lange    schedule 26.05.2016
comment
Возможно, вы захотите прочитать мой ответ на аналогичную проблему.   -  person Zohar Peled    schedule 26.05.2016


Ответы (1)


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

Со страницы TechNet о типах таблиц, определяемых пользователем:

Ограничения

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

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

«Вложенность» в реляционные базы данных достигается с помощью внешних ключей

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

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

CREATE TYPE A AS TABLE
(
    A_Id int
)

GO


CREATE TYPE B AS TABLE
(
    B_Id int,
    A_Id int -- "FK"
)
GO
person Zohar Peled    schedule 26.05.2016
comment
Думаю, StackOverflow проще, чем TechNet или MSDN. - person shadow; 26.05.2016
comment
Обычно я бы не стал беспокоиться, но я подумал о том, что означает вложение в этих ситуациях, поэтому я попытался создать ограничение внешнего ключа между двумя типами таблиц и не смог. Думаю, этому есть причина. - person Zohar Peled; 26.05.2016
comment
СОЗДАТЬ ТИП A КАК ТАБЛИЦУ (A_Id int) GO СОЗДАТЬ ТИП B КАК ТАБЛИЦУ (B_Id int, A_Id A - необходимо использовать A как тип данных в B) GO - person Pradeep Kolli; 26.05.2016
comment
@PradeepKolli Это просто невозможно. Это то, что я объяснил в своем ответе. - person Zohar Peled; 26.05.2016
comment
Пожалуйста, помогите, как отправить данные таблицы в строках таблицы с asp.net на sql. через цикл или есть какой-либо простой способ отправить данные вложенной таблицы на сервер. - person Pradeep Kolli; 26.05.2016
comment
Возможно, вы захотите прочитать мою ответ на аналогичную проблему. - person Zohar Peled; 26.05.2016
comment
К вашему сведению, с чего бы это было? - это возможно в PostgreSQL - фактически преобразование проекта из Postgres в SQL Server ... и это раздражает (и добавьте отсутствие собственной поддержки JSON в качестве типа столбца ...) - person Shahar Hadas; 30.05.2020