This is my trigger and its running perfectly with the help of stackoverflow.com I edit my question because of blocking.
x
USE [Online Medical Store]
GO
/****** Object: Trigger [dbo].[tr_issueBook] Script Date: 4/7/2021 11:33:13 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Trigger [dbo].[tr_issueBook]
on [dbo].[IssueBooks]
for insert
AS
Begin
Declare @IsbnNumber varchar
Select @IsbnNumber = ISBN_Number from inserted
update searchBooks set
tbl_numberOfCopies =tbl_numberOfCopies - 1
where tbl_IsbnBooks = @IsbnNumber
End
Advertisement
Answer
There are two issues with your trigger query
Issue 1. You didn’t declare the size for the variable
Declare @IsbnNumber varchar
By not declaring the size, it is defaulted to 1
. So any value assign to it will be truncated
Issue 2. You are assuming the inserted
only contains 1 single row. Which infact might contain 0
to N
depending on the insert statement
So your statement does not handle that
Select @IsbnNumber = ISBN_Number from inserted
Your trigger should be just simply
update b
set tbl_numberOfCopies = tbl_numberOfCopies - 1
from inserted i
inner join searchBooks b on b.tbl_IsbnBooks = i.ISBN_Number
You don’t need to declare
a variable at all in your trigger query.
To answer your question on the varchar
size, you should define it like
Declare @IsbnNumber varchar(10)
assuming that the size of the ISBNNumber
is 10