【问题标题】:How To add composite unique key to user defined table Type如何向用户定义的表类型添加复合唯一键
【发布时间】:2016-07-28 11:26:37
【问题描述】:

如何向用户定义的表类型添加复合唯一键,如下所示:

CREATE TYPE [dbo].[jobdata] AS TABLE(
    [emp_num] [smallint] NULL,
    [job_date] [date] NULL,
    [year] [smallint] NULL,
    [job_code] [smallint] NULL,
    [order_year] [smallint] NULL,
    [order_ser] [decimal](5, 0) NULL,

)
GO

我希望 emp_num,job_date 成为复合唯一键。

【问题讨论】:

  • unique(emp_num, job_date),要么在创建表中,要么在更改表中。
  • 这些字段不能允许空值。
  • 用户定义的表已经存在我想修改它
  • docs明确指出“用户定义的表类型定义创建后不能修改。”
  • @jarlh true,如果 op 坚持使用空值,那么它应该是唯一的而不是主键。

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


【解决方案1】:

您不能更改用户定义的表类型,您需要删除并重新创建以进行任何更改..

From MSDN..

用户定义的类型在创建后无法修改,因为更改可能会使表或索引中的数据无效。要修改类型,您必须删除该类型然后重新创建它,或者使用 WITH UNCHECKED DATA 子句发出 ALTER ASSEMBLY 语句。

下面是对 UserDefined Table Type 创建唯一约束的方法

CREATE TYPE test AS TABLE 
( col1 VARCHAR(50)
, col2 INT ,
 unique (col1,col2)
);

注意:我们不能命名约束,所以像正常方式一样创建约束是无效的..

以下示例

 CREATE TYPE test AS TABLE 
    ( col1 VARCHAR(50)
    , col2 INT ,
    constraint test  unique (col1,col2)
    );

【讨论】:

  • 这是用户定义的表
【解决方案2】:

ALTER TABLE jobdata ADD CONSTRAINT [Unique_emp_num_ob_date] UNIQUE (
    emp_num
    ,job_date
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多