当前位置:数据库 > SQLServer >>

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安装问题。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,