首页 > 解决方案 > 在将新行插入现有表时自动创建新 GUID 不工作

问题描述

我在 MS SQL 中有一个名为 myTab 的现有表。它有以下字段

empno(PK) nchar(10),
 age int

现在,我想添加一个 myGUID 列,并在我插入新行以及更新现有行时用 GUID 填充它。

所以我添加了声明

ALTER TABLE myTab ADD myGUID uniqueidentifier DEFAULT NewId() NOT NULL;

更新现有行可以正常工作。

但是,当我尝试插入值时,

插入 myTab 值 ( 1000, 22 );

它失败了,并给出以下消息

**Column name or number of supplied values does not match table definition.**

当我做

插入 sourav_test2 值 (20055711,23,NEWID());

上述声明有效。

我希望在不更改插入语句的情况下填充 GUID。是否可以通过触发器或函数?

标签: sqlsql-server

解决方案


始终列出您要插入的列!

INSERT INTO myTab (empno, age)
    VALUES ('1000', 22);

还要为值使用正确的类型。未提及的列将被分配其默认值,或者NULL如果没有明确的默认值。

您的表有三列,因此如果您省略列列表,则insert需要三个值。如果需要,您仍然可以通过在子句中使用DEFAULT关键字来设置默认值:VALUES

INSERT INTO myTab (empno, age, myGUID)
    VALUES ('1000', 22, DEFAULT);

推荐阅读