Adding time slots through trigger SQL Server
Your schema looks fine but you need to calculate the dates in a different way, 
In T-SQL you can't just add and subtract.

@NumberOfSlots calculation should be like this:

    set @NumberOfSlots = convert (int, (DATEDIFF(MINUTE, @SlotStart, @SlotEnd)))/@Duration


adding to a datetime is done like this:

    DATEADD(MINUTE, @Duration, @SlotStart)


The order in the loop needs to be changed too:

    set @i = 0;
    While @i&lt;@NumberOfSlots
        Begin
           Set @SlotEnd = DATEADD(MINUTE, @Duration, @SlotStart)
           insert into timeslots
           (AvailabilityId, SlotStart, SlotEnd, SlotDoctorId,IsAvailable) 
           values 
           (@AvailabilityId, @SlotStart, @SlotEnd, @SlotDoctorId,1)
           Set @SlotStart = @SlotEnd

           set @i=@i+1
        End


With these changes, I think the trigger will work and give correct values, but
that is a lot of work in a trigger.

I think you should consider solving this by building stored procedures doing the same, leaving the tables with data and no logic.

One stored procedure per table, that inserts a row to that table.

For 'Availability' the stored procedure could be createAvailability and the code would be very similar to what you have in the trigger, but in the loop it calls the stored procedure to create a row in Timeslots:

    CREATE PROCEDURE createAvailability 
    (
        @AvailabilityId INT, 
        @SlotStart DATETIME, 
        @SlotEnd DATETIME, 
        @SlotDoctorId INT
    ) AS
    BEGIN
        DECLARE @i INT
        DECLARE @NumberOfSlots INT 
        DECLARE @Duration INT 

        SET @NumberOfSlots = convert(INT, (DATEDIFF(MINUTE, @SlotStart,@SlotEnd))) / @Duration
        SET @i = 0;
        WHILE @i &lt; @NumberOfSlots
        BEGIN
            SET @SlotEnd = DATEADD(MINUTE, @Duration, @SlotStart)
            EXEC createTimeslots(@AvailabilityId, @SlotStart, @SlotEnd, @SlotDoctorId, 1)
            SET @SlotStart = @SlotEnd
            SET @i = @i + 1
        END
    END