【问题标题】:Can I construct a table with the user-defined table type?我可以用用户定义的表类型构造一个表吗?
【发布时间】:2019-02-09 10:19:20
【问题描述】:

我有一个名为 EmpType 的表类型,其结构如下:

CREATE TYPE EmpType AS TABLE
(
ClientId UNIQUEIDENTIFIER,
EmployeeId INT,
Experience SMALLINT,
Age SMALLINT
);

此查询在 MS SQL Server 中成功运行。

现在我尝试使用此表类型构建另一个表,它给了我一个错误。

CREATE TABLE EmpHashIndex2
(
HashIndex SMALLINT CONSTRAINT has_pk PRIMARY KEY,
TableName dbo.EmpType
);

执行上述查询后,错误如下:

The column "TableName" does not have a valid data type. A column cannot be of a user-defined table type.

【问题讨论】:

  • 如果您想要该类型的列,那么“列不能属于用户定义的表类型。”消息中的内容不清楚?这是一个响亮的不,不是吗?但是,如果您想要该类型的表格,请参阅"create SQL Server table based on a user defined type"
  • 看起来您正试图在一行中存储多行。这不是 DBMS 的工作方式。您需要创建 2 个表,并定义主键和外键,以便定义多对一关系。
  • @Samarth 请描述您正在努力完成的任务。你想用这样的模型达到什么目的?
  • 当然不是!!!表不能将表作为列。这就像询问您是否可以将整个 Excel 选项卡放在一个单元格中。这没有任何意义。
  • 我只想让“TableName”列的每个单元格指向一个可以在其他地方使用的不同表格。

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


【解决方案1】:

在我看来,您正在尝试将 OOP 方法应用于关系数据库。类似于指向任何数据的“指针”。这不是它在 RDBMS 中的工作方式。

也许您需要这样的关系模式:

Client <- EmployeePerClient -> Employee

它们都不能是table type,它们都必须是tables,foreign keys 定义了它们的依赖关系。

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2016-09-01
    • 2019-08-02
    • 2022-11-05
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多