【问题标题】:Is it possible to use user defined table type inside another user defined table type in sql是否可以在 sql 中的另一个用户定义的表类型中使用用户定义的表类型
【发布时间】:2019-08-02 10:23:27
【问题描述】:

是否可以在 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。通过循环或有任何简单的方法将嵌套表数据发送到服务器。

【问题讨论】:

  • 你试过了吗?还是只是问问?
  • 这个概念打破了 1NF。您会将整个表存储在一个元组中。这违背了关系数据的整个概念。像这样的事情的表现将是令人难以置信的糟糕。考虑一下当您开始用多个级别嵌套它时会发生什么。呃。
  • 您可能想阅读my answer to a similar problem

标签: sql sql-server sqldatatypes user-defined-types


【解决方案1】:

没有。为什么会这样?这不是 SQL Server(或任何关系数据库,就此而言)的工作方式。

来自TechNet's page on User-Defined Table Types

限制

用户定义的表类型有以下限制:

  • 用户定义的表类型不能用作表中的列或 结构化用户定义类型中的字段。

关系型数据库中的“嵌套”是通过Foreign keys实现的

您甚至不能在两个用户定义的表类型之间创建外键约束。

您可以做的是创建两个表类型,其中一个有一个列来保存另一个的 id,如下所示:

CREATE TYPE A AS TABLE
(
    A_Id int
)

GO


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

【讨论】:

  • 我猜 StackOverflow 比 TechNet 或 MSDN 更容易。
  • 通常我不会打扰,但我想到了在这种情况下嵌套意味着什么,所以我尝试在 2 个表类型之间创建外键约束但不能。我想这背后是有原因的。
  • CREATE TYPE A AS TABLE (A_Id int) GO CREATE TYPE B AS TABLE (B_Id int, A_Id A --需要在B中使用A作为数据类型) GO
  • @PradeepKolli 这简直是不可能的。这就是我在回答中所解释的。
  • 您可能想阅读my answer to a similar problem
猜你喜欢
  • 2016-09-01
  • 2011-11-28
  • 1970-01-01
  • 2019-02-09
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多