SQL Triggers not preventing insert
Question
I am having trouble getting a trigger to work. What it needs to do is to prevent any customer with last name Glass from being inserted into the database. This is what I have:
CREATE TRIGGER no_last_name_glass_trg ON customer AFTER INSERT,UPDATE AS BEGIN DECLARE @CUSTOMER_LAST VARCHAR; SET @CUSTOMER_LAST= (SELECT INSERTED.customer_last FROM INSERTED); IF @CUSTOMER_LAST = 'Glass' BEGIN ROLLBACK RAISERROR('Applicant Glass Denied',14,1); END; END;
The issue is when I add customers with last name of Glass, it inserts without throwing an error. Any ideas? I can make it work in Oracle, but the same method does not work in MS SQL.
asked 2017-04-10 by user121168
Answer
The problem with your code is that you are declaring your variable as varchar
without any length. With variable declarations, varchar
defaults to a length of 1 (note that in other scenarios it will have a different default length).
As a best practice, you should always specify a length on the varchar
datatype. For more details, see this article on the issue.
answered 2017-04-10 by Andy Mallon