【发布时间】:2018-12-31 19:09:33
【问题描述】:
我将列添加到表中:
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
)
【问题讨论】:
-
在我的插入语句中,我有 TaskId、CreationDate 和 CreatedBy,我不需要指定 RedMarkItemsId,因为它是 IDENTITY(1,1),所以它是自动数字字段 @gtosto
-
再想一想:
identity可以改为列列表中的任何位置,因此 SQL Server 无法猜测您提供的 3 个值应该进入 3您命名的列;你必须告诉它。这是一件好事:语言是一致的,而不是通过假设identity恰好是第 1 列而过度慈善,在这种情况下,该假设可能会导致意想不到的结果,并且只会在一种情况下起作用。
标签: sql sql-server database tsql sql-insert