我有一个表叫dbo.Tbl_ActivityInformations
和数据看起来像插入行之前的SQL查询检查条件
Activityid activitymaxcount Activityusedcount
1 10 9
2 10 7
3 15 15
而另一台名为Tbl_AttendeeInformations
和数据看起来像
AttendedID AssID ActivityID
13 123456 1,2
14 123457 1,3
在Tbl_AttendeeInformations
表数据将作为新的一行从页面插入,并在ActivityInformations
表Activityusedcount
列中增加一个适当的activityID
。
现在我想在插入一行之前检查AttendeeInformations
那Activityusedcount < activitymaxcount
使用ActivityID
。如果条件满足,那么只有它允许插入,否则它应该回滚。我有名为SplitString
的功能将ActivityID
分成Tbl_AttendeeInformations
。
这是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
请你帮助的代码。
你应该** **正常化你的表正确的 - 有'1,2'在一列明显违反连第一范式 - 这将使它即使是最基本的关系操作也很难做到...... –
不满意我不能upvote @ marc_s的评论十次。打破第一范式的XX分隔的列值是可怕的;让他们在你的关键专栏是完全不能接受的。 (是的,我知道**你没有设计它,我知道**你不能改变它......但你必须在某处画一条线:) –