CREATE TRIGGER [AllotPoint] ON [dbo].[admindetail] 
AFTER INSERT
ASDECLARE @ID nvarchar(15) -- 记录代码
DECLARE @CommendStaffID nvarchar(15) -- 推荐人代码
DECLARE @CommendStaffName nvarchar(15) -- 推荐人
DECLARE @Name nvarchar(15) -- 教师代码
DECLARE @i    int
DECLARE @StartTime bigint -- 开始时间
DECLARE @EndTime datetime -- 结束时间
DECLARE @AdminTime bigint -- 上课持续时间
DECLARE @Point int -- 点数
DECLARE @StudentCount int -- 学生数量
DECLARE @FlatPoint int -- 平台使用费
DECLARE @FlatIncomePoint int -- 平台使用费收入点数
DECLARE @IncomePoint int -- 收入点数
DECLARE @TruePoint int -- 实际收入点数
DECLARE @TeacherID nvarchar(15) -- 教师代码
DECLARE @CourseID nvarchar(15) -- 课程代码
DECLARE @RoofRate float -- 平台汇率
DECLARE @PointRate float -- 上课汇率SET @ID = (SELECT TOP 1 no FROM admindetail ORDER BY no DESC)
SET @Name = (SELECT name FROM admindetail WHERE no = @ID)
SET @StartTime = (SELECT logtime FROM admindetail WHERE no = @ID)
SET @AdminTime = (SELECT admintime FROM admindetail WHERE no = @ID)
SET @RoofRate = (SELECT ItemValue FROM Class_Parameter WHERE Category = 'RoofRate')
SET @PointRate = (SELECT ItemValue FROM Class_Parameter WHERE Category = 'PointRate')
SET @Point = (SELECT userpoint FROM [user] WHERE name = @Name)
SET @IncomePoint = (SELECT SUM(points) FROM userdetail WHERE logtime > @AdminTime AND logtime < @StartTime + @AdminTime)
SET @StudentCount = (SELECT Count(points) FROM userdetail WHERE logtime > @AdminTime AND logtime < @StartTime + @AdminTime)
SET @FlatPoint = (SELECT ItemValue FROM Class_Parameter WHERE Category = 'Charge')
SET @FlatIncomePoint = @StudentCount * @FlatPoint * @RoofRate
SET @TruePoint = (@IncomePoint - @StudentCount * @FlatPoint) * @PointRate
SET @TeacherID = (SELECT ID FROM admindetail LEFT JOIN T_Staff ON T_Staff.UserName = admindetail.name WHERE no=@ID)
PRINT @TeacherID
SET @CourseID = (SELECT ID FROM Class_Course 
  WHERE StartTime < Convert(DateTime, (DateAdd(s, @StartTime, '01/01/1970 08:00:00')), 120) 
    AND EndTime > Convert(DateTime, (DateAdd(s, @StartTime, '01/01/1970 08:00:00')), 120) 
    AND CreateStaffID = @TeacherID)
SET @CommendStaffName = @Name
IF(@StudentCount > 0)
BEGIN
SET @i = 1
WHILE @i < 9
BEGIN
SET @CommendStaffID = (SELECT CommendStaffID FROM T_Staff WHERE UserName=@CommendStaffName)
SET @CommendStaffName = (SELECT CommendStaffName FROM T_Staff WHERE UserName=@CommendStaffName)
IF @CommendStaffName IS NULL
BREAK
ELSE
UPDATE [user] SET userpoint = userpoint + @TruePoint * 0.02 + @FlatIncomePoint * 0.02 WHERE name = @CommendStaffName
INSERT
  INTO Class_Reckoning (ID, StaffID, TeacherID, CourseID, StartTime, EndTime, Style, Point, Message)
VALUES (newid(), @CommendStaffID, @TeacherID, @CourseID, Convert(DateTime, (DateAdd(s, @StartTime, '01/01/1970 08:00:00')), 120) , Convert(DateTime, (DateAdd(s, @StartTime + @AdminTime, '01/01/1970 08:00:00')), 120), '0', @TruePoint * 0.02, '1')
INSERT
     INTO Class_Reckoning (ID, StaffID, TeacherID, CourseID, StartTime, EndTime, Style, Point, Message)
        VALUES (newid(), @CommendStaffID, @TeacherID, @CourseID, Convert(DateTime, (DateAdd(s, @StartTime, '01/01/1970 08:00:00')), 120) , Convert(DateTime, (DateAdd(s, @StartTime + @AdminTime, '01/01/1970 08:00:00')), 120), '0', @FlatIncomePoint * 0.02, '1') SET @i = @i+1
END
SET @TruePoint = @TruePoint - @TruePoint * 0.02 * (@i -1)
UPDATE [user] SET userpoint = userpoint - @IncomePoint + @TruePoint + (@FlatIncomePoint - @FlatIncomePoint * 0.02  * (@i - 1)) WHERE name = @Name
INSERT
  INTO Class_Reckoning (ID, StaffID, TeacherID, CourseID, StartTime, EndTime, Style, Point, Message)
VALUES (newid(), @TeacherID, @TeacherID, @CourseID, Convert(DateTime, (DateAdd(s, @StartTime, '01/01/1970 08:00:00')), 120) , Convert(DateTime, (DateAdd(s, @StartTime + @AdminTime, '01/01/1970 08:00:00')), 120), '0', @TruePoint + @FlatIncomePoint, '2')
END

解决方案 »

  1.   

    CREATE TRIGGER Reckoning ON [dbo].[userdetail] 
    AFTER INSERT
    ASDECLARE @ID nvarchar(15) -- 记录代码
    DECLARE @StaffID nvarchar(15) -- 学生代码
    DECLARE @TeacherID nvarchar(15) -- 教师代码
    DECLARE @CourseID nvarchar(15) -- 课程代码
    DECLARE @LogTime int            -- 开始时间
    DECLARE @StartTime datetime -- 开始时间
    DECLARE @EndTime datetime -- 结束时间
    DECLARE @Point int -- 点数--赋值
    SET @ID = (SELECT TOP 1 no FROM userdetail ORDER BY no DESC)
    SET @StaffID = (SELECT ID FROM t_Staff WHERE UserName = (SELECT name FROM userdetail WHERE no = @ID))
    SET @TeacherID = (SELECT ID FROM userdetail left join T_Staff ON userdetail.roomname = T_Staff.RoomPort WHERE no= @ID)
    SET @LogTime = (SELECT logtime FROM userdetail WHERE no = @ID)
    SET @StartTime = (Convert(DateTime, (DateADD(s, @LogTime, '01/01/1970 08:00:00')), 101))
    SET @EndTime = (Convert(DateTime, (DateADD(s, (SELECT lasttime FROM [user] WHERE name = (SELECT name FROM userdetail WHERE no = @ID)), '01/01/1970 08:00:00')), 101))
    SET @CourseID = (SELECT ID FROM Class_Course 
      WHERE StartTime < Convert(DateTime, (DateAdd(s, @LogTime, '01/01/1970 08:00:00')), 120) 
        AND EndTime > Convert(DateTime, (DateAdd(s, @LogTime, '01/01/1970 08:00:00')), 120) 
        AND CreateStaffID = @TeacherID)
    SET @Point = (SELECT points FROM userdetail WHERE no = @ID)
    -- 插入数据
    INSERT
    INTO Class_Reckoning (ID,  StaffID, TeacherID, CourseID, StartTime, EndTime, Style, Point, Message)
    VALUES(newid(), @StaffID, @TeacherID, @CourseID, @StartTime, @EndTime, '1', @Point, '0')
      

  2.   

    CREATE TABLE [dbo].[Class_Reckoning] (
    [ID] [uniqueidentifier] NOT NULL ,
    [StaffID] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [TeacherID] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [CourseID] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [StartTime] [datetime] NULL ,
    [EndTime] [datetime] NULL ,
    [Style] [bit] NULL ,
    [Message] [int] NULL ,
    [Point] [int] NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[admindetail] (
    [no] [bigint] IDENTITY (1, 1) NOT NULL ,
    [logtime] [bigint] NULL ,
    [name] [nvarchar] (63) COLLATE Chinese_PRC_CI_AS NULL ,
    [admintime] [bigint] NULL ,
    [roomname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[userdetail] (
    [no] [bigint] IDENTITY (1, 1) NOT NULL ,
    [logtime] [bigint] NULL ,
    [name] [nvarchar] (63) COLLATE Chinese_PRC_CI_AS NULL ,
    [points] [int] NULL ,
    [roomname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOClass_Reckoning表就是上面说的detail表
      

  3.   

    admindetail的触发器好复杂...
    眼晕