高手请进,和触发器有关,在线等待!!!!

有一张GLY表,客户要求GLYID号码唯一,最大的GLYID号码就是GLY总人数,
CREATE TABLE [dbo].[GLY] (
[GLYID] [int] NOT NULL ,
[GLYMC] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[GLYMM] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ISYS] [bit] NULL
) ON [PRIMARY]

---------------------------------------------------------------

也就是说,每来一个人,就网GLY中插入一条记录,当走一个人就删除一条记录?
并且这个数是主键?
无论你做添加或删除是可以这样写:
DECLARE @ls_id INTEGER,@ls_count integer
select @sl_count = 1
insert into 表
select count(*),...... from 表
DECLARE ls_gg CURSOR FOR
SELECT GLYID from 表
OPEN ls_gg
FETCH NEXT FROM ls_gg INTO @ls_id
WHILE (@@FETCH_STATUS <> -1)
begin
update 表 set GLYID = @ls_id WHERE GLYID = @ls_gg
select @ls_id = @ls_id + 1
end
DEALLOCATE ls_gg
---------------------------------------------------------------

方法1:
[GLYID] [int] IDENTITY (1, 1) NOT NULL ,
在程序不要出现GLYID字段,在查询总人数就用count(*)

方法2:
[GLYID] [int] NOT NULL ,
[GLYID1] [int] IDENTITY (1, 1) NOT NULL ,
外键和引用都用GLYID1字段,用空间来换方便。
再加一个触发器来修改GLYID字段,大概:
create tr_GLY_Delete
on Gly
for delete
as
if (select count(*) from deleted)>1
begin
RAISERROR ('一次只能删除一条记录', 16, 1)
ROLLBACK TRANSACTION
return
end
update b
set GLYID=GLYID-1
from deleted d,Gly b
where b.GLYID>d.GLYID
go

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus