本人做本学期项目 关于图书管理系统的
以 图书编号 为 唯一标识 用来加书、减书、借书、还书、罚款
以 条形码 用来  统计图书 库存量 现存量 和 被借次数
图书档案表
CREATE TABLE [dbo].[图书档案] (
        [编号] [int] IDENTITY (000001, 1) NOT NULL ,
[条形码] [varchar] (40) NOT NULL ,
[书名] [varchar] (200) NULL ,
[类型] [varchar] (100) NULL ,
[作者] [varchar] (100) NULL ,
[译者] [varchar] (100) NULL ,
[价格] [money] NULL ,
[是否注销] [bit] NOT NULL ,
        [是否借阅] [bit] Not null
) ON [PRIMARY]
GO
图书统计表
create table 图书统计 (
        [条形码] [varchar] (40) NULL ,
[书名] [varchar] (200) NULL ,
[类型] [varchar] (100) NULL ,
[作者] [varchar] (100) NULL ,
[译者] [varchar] (100) NULL ,
[价格] [money] NULL ,
[现存量] [int] NULL ,
[库存量] [int] NULL ,
[借阅次数] [int] NULL
) ON [PRIMARY]
go写一个触发器当向图书档案表中 插入数据 
则 同步向 图书统计表中插入数据
图书档案表的现存量、库存量、借阅次数 首次插入时为分别为 1,1,0
当插入数据  条形码 相同时 
那么只更新 图书档案表中 该 条形码列中的 现存量 和库存量
每插一次 现存量和库存量都加1.本人初学触发器
这是我写的ALTER   trigger trgInsertBookRecord
on 图书档案
for insert
as
declare @条形码 varchar(40),
        @书名varchar(200),
        @类型 varchar(100),
        @作者 varchar(100),
        @译者 varchar(100),
        @价格 money
if exists(select * from 图书统计 where 条形码 = @条形码)
    begin
    update 图书统计
    set 现存量 = 现存量 +1 , 库存量 = 库存量 +1
    where 条形码 = @条形码
    end
else
    begin
    insert into 图书统计(条形码,书名,类型,作者,译者,价格,现存量,库存量,借阅次数)
    select 条形码 = @条形码,
           书名 = @书名,
           类型 = @类型,
           作者 = @作者,
           译者 = @译者,
           价格 = @价格,1,1,0
    from inserted 
    where 条形码 = @条形码
    end
return不知道语句哪里错了
总是不能触发在线等答案
谁先分谁得

解决方案 »

  1.   

    由于是复制过来的 触发器中的 ALTER  没有改为 create
      

  2.   

    ALTER  trigger trgInsertBookRecord
    on 图书档案
    for insert
    as
    update b  set 现存量 = b.现存量 +con , 库存量 = b.库存量 +con  from (select 条形码,count(1) con from inserted  group by 条形码)i join 图书统计 b on i.条形码=b.条形码    insert into 图书统计(条形码,书名,类型,作者,译者,价格,现存量,库存量,借阅次数)    select 
     i.条形码 ,i.书名 ,i.类型 ,i.作者 ,i.译者 , i.价格 ,count(*),count(*),0
        from 
    inserted i 
    left join 
    图书统计 b on i.条形码=b.条形码
    where
    b.条形码 is null
    group by i.条形码 ,i.书名 ,i.类型 ,i.作者 ,i.译者 , i.价格