sql server2000 触发器insert 的问题?
补充:insert into vw_test (id,name) values(0,'jboss')
这样写它不会报错,id也是自增的,不管你插的id为何值,它都依次递增。
在没有写触发器的时候:
insert into vw_test (name) values('jboss')
这样写都能易做图去。为什么呢?写了触发器就不行?
vw_test 是test表的视图,sql 2000对视图增删改,需要触发器。
test是测试用的,我的项目里面是多表关联的视图,所以要写触发器。
追问:照你说的,
po:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
保存:
this.purchaseBillDao.save(purchaseBill);
save:
public <T> T save(T instance)
{
getJpaTemplate().persist(instance);
return instance;
}
sql事件探查器:
exec sp_executesql N'insert into vw_Bill_IdxBillForWeb (billtype, 没有id,为什么?就是,前台一个save语句,报错id不能为空。
探查器查看没传id,你不是说必须要id(不为空)的嘛,
getJpaTemplate().persist(instance);
怎么没传呢??可能有点相通了。
我的实体类主键生成策略id为自增的,
getJpaTemplate().persist(instance);
instance实体传过去的时候,可能就没有传id。
如果我用的是表的话,id自增,不传id,完全正确。
可是我现在用的是视图,instead of insert 触发器必需传不为空的列,这刚好就报错了。
看来只能用原生sql,传id过去。现在是我有一个前台保存,
用的是
getJpaTemplate().persist(instance);
报错id不能为空,
用事件探查器查看
exec sp_executesql N'insert into vw_Bill_IdxBillForWeb (billtype, 没有id,就是这里搞不懂?有
位朋友说,视图必须要传不为空的列,这个怎么不传id?
答案:SQL帮助上有:
引用具有 INSTEAD OF INSERT 触发器的视图的 INSERT 语句必须为每个不允许为空的视图列提供值。这包括引用不能为其指定输入值的基表列的视图列:
1.基表中的计算列。
2.IDENTITY INSERT 为 OFF 的基表中的标识列。
3.具有 timestamp 数据类型的基表列。
因此,对于自增长列,如果是表,是不允许为其赋值,但如果是视图,则必须为其赋值。
其他:不知道 看一下TEST表的ID具体是什么类型,是否真的是自增的。 我想应该是属性ID默认值设为不能为空了,建议查看下ID结构并设为允许为空
=====================祝君生活愉快!=====================
==============希望我的回答能给你带来点点帮助================== 看触发器问题好像出在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自增,会有错误提示,楼主确认一下吧
上一个:SQL server 2008在创建用户sa时的15405错误是什么错误?
下一个:SQL server 2005安装问题。