数据表的删除一项后引发的更新问题
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[G_Question] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1)
drop table [dbo].[G_Question]
GO
CREATE TABLE [dbo].[G_Question] (
[questionID] [int] identity(1,1) NOT NULL ,
[question] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL ,
[A] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL ,
[B] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL ,
[C] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL ,
[D] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL ,
[E] [varchar] (90) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[G_Question] ADD
CONSTRAINT [PK_G_Question] PRIMARY KEY CLUSTERED
(
[questionID]
) ON [PRIMARY]
GO
insert into G_Question(question,A,B,C,D,E) values( '您的总体评价 ', '80%以上满意; ', '60~80%满意; ', '40~60%满意; ', '40%以下满意。 ',NULL)
insert into G_Question(question,A,B,C,D,E) values( '题1的评价 ', '80%以上满意; ', '60~80%满意; ', '40~60%满意; ', '20~%40%; ', '20以下满意。 ')
insert into G_Question(question,A,B,C,D,E) values( '题2的评价 ', '80%以上满意; ', '60~80%满意; ', '40~60%满意; ', '20~%40%; ', '20以下满意。 ')
insert into G_Question(question,A,B,C,D,E) values( '题3的评价 ', '80%以上满意; ', '60~80%满意; ', '40~60%满意; ', '20~%40%; ', '20以下满意。 ')
insert into G_Question(question,A,B,C,D,E) values( '题4的评价 ', '80%以上满意; ', '60~80%满意; ', '40~60%满意; ', '40%以下满意。 ',NULL)
如此创建完了表,
要求:
不管插入或删除时questionID连续,
自己想法:
用identity实现了插入时只增加,通过删除其中某条记录时,其它记录的questionID随着变化达到目的
如删了questionID为2的一条记录,则由3以后的全部自减1;而删除了questionID为5 的,则5以后的全部自减1,如何创建表的delete触发器实现?请各位帮帮忙~~~~~~~~~
或者,通过别的方法实现?
------解决方案--------------------设置questionID [int] identity(1,1) NOT NULL
以后是不能直接更新questionID的,具体的请查看IDENTITY 属性帮助内容.
参考的方法:
可以把identity(1,1)去掉,新增加数据的时候questionID 取MAX(questionID )+1,
删除数据的时候,使用触发器来完成部分questionID的重新排序。(对于经常删除数据、数据量大的情况,这样的动作开支是非常大的)
------解决方案--------------------我不想用你的表和数据,假设了一个表T1(id int , f varchar(10))
插入数据时使用instead触发器
create trigger hyc2 on T1
instead of insert
as
begin
insert T1 select (select max(id)+1 from T1),(select f from inserted)
end
go
删除时用after 触发器,把大于所删除id的id都减一就可以实现了
create trigger hyc on T1
for delete
as
begin
declare @num int
select @num=id from deleted
update T1 set id=id-1 where id> @num
end
go
上千万百万的记录不敢保证效率