为什么DMSsqlserver建表语句在dms执行会自动加上DEFAULT NULL 导致执行失败?[阿里云数据管理DMS]

为什么DMSsqlserver建表语句在dms执行会自动加上DEFAULT NULL ,导致执行失败CREATE TABLE [dbo].activity NOT NULL,
Name VARCHAR(50) NOT NULL,
Closed BIT NOT NULL,
Sort INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
Description nvarchar(1000) NOT NULL,
Expand VARCHAR(500) NOT NULL,
LastUpdateUserId INT NOT NULL,
LastUpdateTime DATETIME NOT NULL,
CreateUserId INT NOT NULL,
CreateTime DATETIME NOT NULL,
IsDelete BIT NOT NULL,
PRIMARY KEY (ActivityId)
);工单号10216221

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
5 条回复 A 作者 M 管理员
  1. 您好,根据sql执行错误提示来看是在执行sql时ActivityId默认加上了DEFAULT NULL,建议您设置DEFAULT NULL 为自增IDENTITY(1,1) NOT NULL,这样再尝试一下。

  2. 您遇到的这个问题是因为DMS在执行SQL Server建表语句时,默认会增加每个列的默认值约束。这个默认值约束如果和原语句冲突,就会导致执行失败。
    具体来说,DMS在执行SQL Server建表时,会自动为非标识键列添加默认值约束,形式为:
    COLUMN_NAME 数据类型 DEFAULT NULL
    这个默认值会与原语句中的 NOT NULL 等约束冲突,因此执行失败。
    需要注意的是,这个默认值约束的增加只会发生在使用DMS同步或执行SQL时,在SQL Server中直接执行创建表语句不会有这个问题。
    要解决这个问题,您可以通过以下几种方式:

    1. 在创建表语句中直接指定默认值,使其不再自动添加默认值。
    2. 在DMS任务配置中关闭这个默认值补全功能。
    3. 在语句最后增加一段修改默认值的语句,让其符合预期。
    4. 将创建表语句分成CREATE TABLE和ALTER TABLE两条语句,先创建表结构,再修改默认值。
    5. 使用不确定DEFAULT值的方式定义列,例如:COL1 int NULL。
      综上,明确DMS这个默认值自动增加的特性后,可以通过多种方式规避这个问题,实现建表语句的正常执行。
  3. 工单原因类别未被保存:如果在创建工单时,工单原因类别未被保存,您将无法查看工单原因类别。请检查工单原因类别是否已被保存。
    工单原因类别已被删除:如果在创建工单时,工单原因类别已被删除,您将无法查看工单原因类别。请检查工单原因类别是否已被删除。
    工单原因类别未被添加到工单中:如果在创建工单时,工单原因类别未被添加到工单中,您将无法查看工单原因类别。请检查工单原因类别是否已被添加到工单中。

  4. 如果你使用的是SQL Server 2012或更高版本,可以考虑使用OFFSET子句来避免自动添加DEFAULT NULL。例如:

    CREATE TABLE [dbo].activity (      ActivityId INT NOT NULL,      Name VARCHAR(50) NOT NULL,      Closed BIT NOT NULL,      Sort INT NOT NULL,      StartTime DATETIME NOT NULL,      EndTime DATETIME NOT NULL,      Description NVARCHAR(1000) NOT NULL,      Expand VARCHAR(500) NOT NULL,      LastUpdateUserId INT NOT NULL,      LastUpdateTime DATETIME NOT NULL,      CreateUserId INT NOT NULL,      CreateTime DATETIME NOT NULL,      IsDelete BIT NOT NULL,      PRIMARY KEY (ActivityId)  ) OFFSET 0 ROWS;

    这样可以避免自动添加DEFAULT NULL的问题。