sql server2000 触发器insert 的问题?
发布网友
发布时间:2022-04-11 18:32
我来回答
共6个回答
热心网友
时间:2022-04-11 20:01
看触发器问题好像出在test这个表上呢
建议检查一下test表的id是否是自增的,看是否是提示有问题
--===============================
测试了一下,貌似如果test表有问题的话,会提示test,看来不是test的问题
楼主的触发器是 alter啊,不是create,确认是已经创建上了对吧?
================================
insert into vw_test (id,name) values(0,'jboss')
这样写它不会报错,id也是自增的,不管你插的id为何值,它都依次递增。
这个如果没有问题,那很显然楼主你的vw_test里的id不是自增的
测试
create table vv_test
(
id int identity(1,1),
name varchar(10)
)
create table test
(
id int not null,
name varchar(10)
)
create trigger t_vv_test on vv_test
instead of insert
as
declare @name varchar(10)
begin
select @name = name from inserted
insert into test(name) select @name
end
insert into vv_test(id,name) select 0,'jpa'
--提示
Msg 544, Level 16, State 1, Line 1
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'vv_test' 中的标识列插入显式值。
--id自增,会有错误提示,楼主确认一下吧
热心网友
时间:2022-04-11 21:19
SQL帮助上有:
引用具有 INSTEAD OF INSERT 触发器的视图的 INSERT 语句必须为每个不允许为空的视图列提供值。这包括引用不能为其指定输入值的基表列的视图列:
1.基表中的计算列。
2.IDENTITY INSERT 为 OFF 的基表中的标识列。
3.具有 timestamp 数据类型的基表列。
因此,对于自增长列,如果是表,是不允许为其赋值,但如果是视图,则必须为其赋值。
热心网友
时间:2022-04-11 22:54
我想应该是属性ID默认值设为不能为空了,建议查看下ID结构并设为允许为空
=====================祝君生活愉快!=====================
==============希望我的回答能给你带来点点帮助==================
热心网友
时间:2022-04-12 00:45
你是两张表
确认下VV_TEST表的ID是否是自增列?
或者直接测试下
insert into vv_test(id,name)values(1,'test')
insert into test(id,name)values(1,'test')
热心网友
时间:2022-04-12 02:53
看一下TEST表的ID具体是什么类型,是否真的是自增的。