CREATE TABLE TEST(A INT,B INT,C INT) 首先直接插入数据: INSERT TEST SELECT 1,2,3 结果正常: a b c ----------- ----------- ----------- 1 2 3 然后建立触发器: CREATE TRIGGER TR_TEST ON TEST INSTEAD OF INSERT AS BEGIN INSERT INTO TEST SELECT * FROM INSERTED -- 把新数据加入表中. END GO 插入数据: INSERT TEST(A,C) SELECT 2,5 SELECT * FROM TEST a b c ----------- ----------- ----------- 1 2 3 2 NULL 5 (2 行受影响) 这里也无可厚非。但是我们注意到:触发器中的一句话 INSERT INTO TEST SELECT * FROM INSERTED 它可以把数据对应的插入各列。那么是不是正常的也可以呢?做个测试 INSERT INTO TEST SELECT * FROM (SELECT 2 AS A,2 AS B) T 报错啦: --消息 213,级别 16,状态 1,第 1 行 --插入错误: 列名或所提供值的数目与表定义不匹配。 ╮(╯▽╰)╭,看来从inserted插入数据和普通的数据插入还是有区别的。