设置DEFAULT值列后INSERT失败

时间:2018-12-31 19:09:33

标签: sql sql-server tsql

我将列添加为表

RedMarkItemsId (IDENTITY(1,1) NOT NULL PRIMARY KEY)
TaskId (UNIQUEIDENTIFIER)
CreationDate (DATETIME)
CreatedBy (UNIQUEIDENTIFIER)

我想创建像这样的列

  ALTER TABLE RedMarkItems ADD Item1 BIT DEFAULT(0)

但是当我尝试插入一些值时:

INSERT INTO RedMarkItems 
VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF')

它引发错误:

  

列名或提供的值数与表定义不匹配。

如果将DEFAULT(0)设置为该新列,为什么会出现此错误?

表创建脚本:

CREATE TABLE RedMarkItems 
(
    RedMarkItemsId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    TaskId UNIQUEIDENTIFIER,
    CreationDate DATETIME,
    CreatedBy UNIQUEIDENTIFIER
)

1 个答案:

答案 0 :(得分:8)

这条SQL无效:

INSERT INTO RedMarkItems 
VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF')

不提供所有要插入的列时,需要显式指定目标列。由于仅分配3列,因此您可能需要:

INSERT INTO RedMarkItems(
    RedMarkItemsId, 
    TaskId, 
    CreationDate
) VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF'
);