0
我想创建一个触发器,检查作者是否已经存在于一个基于他们的名字和姓氏的组合中的表中。从我读过的这个触发器应该可以工作,但是当我尝试插入任何新的作者时,它会给出“作者已经存在于表格中!”错误,即使我插入表中不存在的作者。MS SQL检查两个字段中的重复
这里是触发
USE [WebsiteDB]
GO
CREATE TRIGGER [dbo].[tr_AuthorExists] ON [dbo].[Authors]
AFTER INSERT
AS
if exists (select * from Authors
inner join inserted i on i.author_fname=Authors.author_fname AND i.author_lname=Authors.author_lname)
begin
rollback
RAISERROR ('Author exists in table already!', 16, 1);
End
下面是表
CREATE TABLE [dbo].[Authors](
[author_id] [int] IDENTITY(1,1) NOT NULL,
[author_fname] [nvarchar](50) NOT NULL,
[author_lname] [nvarchar](50) NOT NULL,
[author_middle] [nvarchar](50) NULL,
CONSTRAINT [PK_Authors] PRIMARY KEY CLUSTERED
(
[author_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
任何援助将不胜感激!
你真的应该在你的桌子上有一个主键。这两列的组合应该是一个唯一的约束,而不是试图用触发器来做到这一点。 –
author_id是主键,忘记了写入。这是针对大学数据库项目的,我们需要创建几个触发器 – dbs1crew
@cbranch恰恰相反。你不想在这里开始一个明确的交易。交易将始终以触发器启动。 –