【问题标题】:creating before INSERT TRIGGER comparing values between two tables在 INSERT TRIGGER 之前创建比较两个表之间的值
【发布时间】:2013-09-09 11:21:09
【问题描述】:

我需要帮助创建一个插入前触发器,因为我是 TSQL 新手。下面是两张表。

工资表:

CREATE TABLE SALARY
(
    StarName varchar(30) NOT NULL,
    MovieTitle varchar(30)NOT NULL,
    MovieYearMade numeric(4, 0) NOT NULL,
    Amount numeric(8, 0) NULL,
    PRIMARY KEY (MovieTitle,StarName,MovieYearMade),
)

MOVIESTAR表

CREATE TABLE MOVIESTAR
(
    Name varchar(30) NOT NULL,
    Address varchar(20),
    City varchar(15) DEFAULT ('Palm Springs'), 
    Gender char(1) NULL CHECK (Gender ='M' OR GENDER ='F'),
    BirthYear Numeric(4),
    PRIMARY KEY CLUSTERED (Name)
)

我想创建一个触发器,以便在添加新电影时。如果SALARY.MovieYearMadeMOVIESTAR.BirthYear 之前,它会阻止添加SALARY.Amount

当我比较两个表(即SALARYMOVIESTAR)中的值时,我对如何定义触发器感到困惑。

谢谢,

【问题讨论】:

  • SQL Server没有Before Triggers,只有After Triggers和Instead Of Triggers。 Google 可以轻松地向您展示如何执行这些操作。

标签: sql-server tsql triggers


【解决方案1】:

你在寻找这样的东西吗?

CREATE TRIGGER tg_salary ON salary
INSTEAD OF INSERT AS
BEGIN
  INSERT INTO salary (StarName, MovieTitle, MovieYearMade, Amount)
  SELECT i.StarName, i.MovieTitle, i.MovieYearMade, 
         CASE WHEN i.MovieYearMade < s.BirthYear THEN NULL ELSE i.Amount END
    FROM INSERTED i JOIN moviestar s
      ON i.StarName = s.Name
END

这里是SQLFiddle演示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多