Ich möchte einen Vergleich durchführen, wenn @ accid2 nicht gleich @accid dann Rollback-Aktion, sonst führen Sie einfügen.Wenn Else-Vergleich nicht funktioniert
Mein Ergebnis dieses Triggers ist sogar, dass nicht übereinstimmt, aber es immer noch in meine Tabelle einfügen.
hier ist mein Code:
ALTER TRIGGER [dbo].[TG_checkacctypehtl]
ON [dbo].[Accommodation_Hotel] INSTEAD OF INSERT
AS
DECLARE @accid NVARCHAR(50), @accid2 NVARCHAR(50),@hid NVARCHAR(50),@fsp NVARCHAR(50), @fc NVARCHAR(50), @sr NVARCHAR(50);
SELECT @hid = i.hotel_id FROM INSERTED i;
SELECT @fsp = i.facillities_swimming_pool FROM INSERTED i;
SELECT @fc = i.facillities_catering FROM INSERTED i;
SELECT @sr = i.star_rating FROM INSERTED i;
SELECT @accid2 = i.accommodation_id FROM INSERTED i;
SELECT @accid = accommodation_id FROM [dbo].[Accommodation] WHERE accommodation_type= 'hotel' AND [email protected];
BEGIN
BEGIN TRAN
SET NOCOUNT ON
PRINT @accid2
PRINT @accid
IF(@accid2 != @accid)
BEGIN
RAISERROR('Record Not Inserted, Accommodation ID is not a Hotel Id',16,1); ROLLBACK; END
ElSE BEGIN
INSERT INTO [dbo].[accommodation_hotel] (hotel_id,facillities_swimming_pool,facillities_catering,star_rating,accommodation_id)
VALUES (@hid,@fsp,@fc,@sr,@accid2);COMMIT;
END
END
* print für die Prüfung ist der Wert i erhalten.
ist das mein logischer Fehler oder mein Syntaxfehler?
Neben dem Punkt, aber es ist in der Regel eine schlechte Idee, ein Commit oder Rollback innerhalb eines Triggers zu tun. – sstan
Was sind die Werte für '@ accid2' und' @ accid'? – sstan
Ihr Auslöser hat ** MAJOR ** Fehler, in dem Sie davon ausgehen, dass es ** einmal pro Zeile ** genannt wird - das ist ** nicht ** der Fall. Der Trigger wird ** einmal pro Anweisung ** ausgelöst. Wenn also Ihre INSERT-Anweisung, die diesen Auslöser auslöst, 25 Zeilen einfügt, erhalten Sie den Trigger einmal ** ausgelöst, dann aber die "Eingefügte" Pseudo-Tabelle enthalten 25 Zeilen. Welche dieser 25 Zeilen wird Ihr Code hier auswählen? 'SELECT @id = u.id FROM Eingefügte u' - es ist nicht deterministisch, Sie erhalten ** eine beliebige Zeile ** und Sie werden ** ignorieren alle anderen Zeilen **. Sie müssen Ihren Trigger neu schreiben, um dies zu berücksichtigen! –