首页 > 解决方案 > 插入后创建触发器以打印语句的问题

问题描述

我正在做一个项目,我需要创建一个触发器,每次在名为注册的表上执行插入时打印一条语句。此触发器应在执行插入后打印教师姓名、会议地点、时间、学生姓名,但当我运行此触发器时,它会完成,但在已注册表上执行插入后,它不会打印任何信息,但insert 确实完成并用值填充表。这是我在下面创建的测试代码,以及提取每个值所需的表和示例插入语句。任何帮助是极大的赞赏。


    USE test
GO
CREATE TRIGGER afterinsertprint on test.dbo.enrolled
AFTER INSERT
AS 
BEGIN

  DECLARE @studentname VARCHAR(30), @meetat varchar(30), @facultyname VARCHAR (30), @location NVARCHAR(10), @studentnumber int, @coursename NVARCHAR(12)

  SELECT @studentnumber = snum, @coursename = cname FROM INSERTED;

  SET @studentname = (SELECT sname from test.dbo.student WHERE snum = @studentnumber)

  SELECT @facultyname = FNAME from test.dbo.faculty f join test.dbo.student s ON s.DEPT_ID = f.DEPT_ID where s.snum in 
  (SELECT snum FROM test.dbo.enrolled WHERE snum =  @studentnumber and CNAME = @coursename);

  SELECT @meetat = meets_at, @location = room FROM test.dbo.class WHERE cname IN (SELECT cname FROM test.dbo.enrolled 
  WHERE snum = @studentnumber and cname = @coursename);

  IF (@studentnumber IS NOT NULL and @coursename IS NOT NULL)

  BEGIN

  PRINT (@studentname +  @facultyname + @meetat + @location)

  END;
  END;

以下是用于表创建/插入的 DML/DLL

CREATE TABLE dbo.STUDENT
     (snum      int,
      sname     nvarchar(12),
      MAJOR     nvarchar(12),
      DEPT_ID   int,
      slevel    nvarchar(12),
      AGE       int,
      CONSTRAINT STUDENT_SNUM_pk PRIMARY KEY (SNUM));
--
CREATE TABLE dbo.CLASS
     (CNAME     nvarchar(12),
      MEETS_AT  time,
      ROOM      nvarchar(10),
      FID       int,
      CONSTRAINT CLASS_CNAME_pk PRIMARY KEY (CNAME));
--
 
CREATE TABLE dbo.ENROLLED
   (SNUM        int,
   CNAME        nvarchar(12));
--
CREATE TABLE dbo.FACULTY
     (FID       int,
     FNAME      nvarchar(40),
      DEPT_ID   int,
      CONSTRAINT FACULTY_FID_pk PRIMARY KEY (FID));
--
CREATE TABLE dbo.DEPARTMENT
      (DEPTid   int,
       DNAME    nvarchar(100),
       LOCATION nvarchar(100),
       
       CONSTRAINT DEPARTMENT_DEPTID_pk PRIMARY KEY (DEPTID));

insert into dbo.STUDENT values (1234,'T.Banks','ME',3,'SR',19);

insert into dbo.DEPARTMENT values (1,'Computer Sciences','West Lafayette');

insert into dbo.FACULTY values (107,'Y.Walton',1);

insert into dbo.CLASS values ('ENG400',cast('08:30' as time),'U003',107);

insert into dbo.ENROLLED values (1234,'ENG400');

标签: sqlsql-servertsqltriggers

解决方案


推荐阅读