简体   繁体   中英

Sql query checking condition before insert row

I have a table called dbo.Tbl_ActivityInformations and the data look like

Activityid  activitymaxcount   Activityusedcount
   1               10                 9
   2               10                 7
   3               15                15

And another table called Tbl_AttendeeInformations and the data look like

AttendedID    AssID     ActivityID
    13        123456      1,2
    14        123457      1,3

In the Tbl_AttendeeInformations table data will be inserted as new row from page and in the ActivityInformations table Activityusedcount column incremented by one for appropriate activityID .

Now I want to check before inserting a row into AttendeeInformations that Activityusedcount < activitymaxcount using ActivityID . If the condition is satisfied then only it will allow to insert otherwise it should rollback. I have function named SplitString to split ActivityID in Tbl_AttendeeInformations .

This is the code for SplitString

create  FUNCTION dbo.SplitString(@FormattedString varchar(8000),@Delimitter char(1))      
returns @retResults TABLE(Value varchar(8000),Rownumber int)      
as      
BEGIN      
        DECLARE        @SearchString as varchar(8000)      
        DECLARE        @AssignString as varchar(8000)      
        DECLARE @Index int                      
        DECLARE @Count int      

        set @SearchString = @FormattedString      
        set @AssignString= ''      
        set @Count = 0      

        while(len(@SearchString) > 0 )      
        begin                      
                SET @Index =   CHARINDEX(@Delimitter,@SearchString, 0)                      
                set @Count = @Count + 1      
                if  @Index = 0      
                begin      
                        INSERT INTO @retResults      
                                values( @SearchString,@Count)      
                        set @SearchString = ''      
                        continue      
                end                      
                set @AssignString = SUBSTRING(@SearchString,1, @Index - 1 )      
                INSERT INTO @retResults values      
                        (@AssignString,@Count)      

                SET @SearchString = (select SUBSTRING(@SearchString, @Index + 1, LEN(@SearchString) -  @Index ))      


        end      
        return      
END     

Please do help.

Pseudocode to show an idea:

INSERT INTO AttendeeInformations
SELECT act.*
FROM ActivityInformations act 
INNER JOIN AttendeeInformations at ON act.ActivityID = at.ActivityID
WHERE act.Activityusedcount < act.activitymaxcount

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM