Ich versuche einen Trigger zu erstellen, der überprüft, ob der Autor bereits in einer Tabelle basierend auf einer Kombination von Vor- und Nachnamen existiert. Nach dem, was ich gelesen habe, sollte dieser Trigger funktionieren, aber wenn ich versuche, einen neuen Autor in die Tabelle einzufügen, gibt es den "Autor existiert in der Tabelle bereits!" Fehler, obwohl ich einen Autor einfüge, der in der Tabelle nicht existiert.MS SQL Check für Duplikate in zwei Feldern
ist hier der Auslöser
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
Hier ist der Tisch Jede Hilfe würde geschätzt
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]
ist!
Sie sollten wirklich einen Primärschlüssel auf Ihrem Tisch haben. Die Kombination dieser beiden Spalten sollte eine eindeutige Einschränkung sein, anstatt dies mit einem Trigger zu versuchen. –
Die author_id ist der Primärschlüssel, vergaß das zu schreiben. Dies ist für ein College-Datenbank-Projekt, und wir sind verpflichtet, ein paar Trigger – dbs1crew
@cbranch im Gegenteil zu erstellen. Sie möchten hier keine explizite Transaktion starten. Eine Transaktion wird IMMER in einem Trigger gestartet. –