Reputation: 49
Here is the code. It is a trigger that is executed after an insert
ALTER TRIGGER [dbo].[GameStacker]
ON [dbo].[CDKeyUser]
AFTER INSERT AS
BEGIN
INSERT INTO User_Achivement
( User_ID ,
Achivement_ID,
Date
)
VALUES ((SELECT User_ID from inserted),
(SELECT
CASE
WHEN COUNT(cd.User_ID)=1 THEN 1
WHEN COUNT(cd.User_ID)=5 THEN 2
WHEN COUNT(cd.User_ID)=10 THEN 3
WHEN COUNT(cd.User_ID)=15 THEN 4
END
FROM CDKeyUser cd
WHERE cd.User_ID=(SELECT User_ID from inserted)
),
GETDATE()
)
END
So my problem is that this trigger executes after every insert.( I know that is how it is supposed to work. ) But, if WHEN COUNT(cd.User_ID) has a value other than the values specified here, it should not execute,or just break the execution. If I add an else statement after WHEN COUNT(cd.User_ID)=15 THEN 4
I can't include any code there like raiseerror because it is translated into the value of Achivement_ID and it gives me an error.
So basically i have to break the execution of the insert statement.
I would really appreciate if someone could help me out with this
Upvotes: 2
Views: 2919
Reputation: 1136
ALTER TRIGGER [dbo].[GameStacker]
ON [dbo].[CDKeyUser]
AFTER INSERT AS
BEGIN
if (selet COUNT(User_ID) from CDKeyUser)<=15
begin
'your code'
END
end
Upvotes: 0
Reputation: 8584
Try:
if (select count(cd1.User_ID)
FROM CDKeyUser cd1
WHERE cd1.User_ID=(SELECT User_ID from inserted)) IN (1, 5, 10, 15)
begin
--your insert statement
end
Complete code:
ALTER TRIGGER [dbo].[GameStacker]
ON [dbo].[CDKeyUser]
AFTER INSERT AS
BEGIN
if (select count(cd1.User_ID)
FROM CDKeyUser cd1
WHERE cd1.User_ID=(SELECT User_ID from inserted)) IN (1, 5, 10, 15)
begin
INSERT INTO User_Achivement
( User_ID ,
Achivement_ID,
Date
)
VALUES ((SELECT User_ID from inserted),
(SELECT
CASE
WHEN COUNT(cd.User_ID)=1 THEN 1
WHEN COUNT(cd.User_ID)=5 THEN 2
WHEN COUNT(cd.User_ID)=10 THEN 3
WHEN COUNT(cd.User_ID)=15 THEN 4
END
FROM CDKeyUser cd
WHERE cd.User_ID=(SELECT User_ID from inserted)
),
GETDATE()
)
end
END
Upvotes: 0
Reputation: 93724
Try something like this.
IF EXISTS (SELECT Count(A.User_ID) cnt
FROM CDKeyUser A
JOIN inserted B
ON a.User_ID = b.User_ID
HAVING Count(A.User_ID) IN ( 1, 5, 10, 15 ))
BEGIN
INSERT INTO User_Achivement
(User_ID,Achivement_ID,Date)
VALUES ((SELECT User_ID
FROM inserted),(SELECT CASE
WHEN Count(cd.User_ID) = 1 THEN 1
WHEN Count(cd.User_ID) = 5 THEN 2
WHEN Count(cd.User_ID) = 10 THEN 3
WHEN Count(cd.User_ID) = 15 THEN 4
END
FROM CDKeyUser cd
WHERE cd.User_ID = (SELECT User_ID
FROM inserted)),Getdate() )
END
Upvotes: 1