2017-02-10 40 views
-1

大家好,我想创建一个接收一个int和一个string一个程序ID的时候都喜欢这样的:从表中删除行,当我传递一个字符串

Int CompeteID = 1

String TeamIDs = “1,8,9”

含义有3个TeamIDs,TeamID = 1,TeamID = 8和TeamID = 9

这是我的DbModel之后:https://i.gyazo.com/7920cca8000436cfe207353aaa7d172f.png

所以我想要做的就是在没有相同的SportID和CompeteID时插入TeamCompete,SportID和CompeteID。

像这样:

TeamCompeteID TeamID CompeteID 
    1    1  1 
    4    8  1 
    5    9  1 
    6    8  1 <---- Can't do this 

但我也想从TeamCompete删除我不转嫁给例如程序TeamIDs:

TeamCompeteID TeamID CompeteID 
    1    1  1 
    2    3  1 <---- Delete this 
    3    4  1 <---- Delete this 

但我不希望删除的TeamCompete的在事件表上... 例如:

EventID TeamCompeteID 
    5   3   <---- Can't delete TeamCompeteID 3 
          -- even though i didn't past it on TeamIDs 

我希望你提出了我的解释。

+0

不够明确。例如添加15行,我们可以在一张表中看到所有变体。我不确定第一部分和第二部分(可能是row_number()结束(由TeamId分区,CompeteId由TeamCompeteId desc排序)和第三部分我没有得到。 – Deadsheep39

回答

0

首先,以这种方式传递数据是非常糟糕的主意。您应该尝试规范化数据,并在每个字段中都有一个值。

但是,如果你不能避免这种情况,我建议你使用一个字符串分割功能,如Jeff Moden's如果你在之前到2016年(the string_split is built into SQL Server 2016)一个SQL Server版本,它返回一个表,你可以从给定的字符串加盟和分隔符。

使用上述杰夫的功能:在

select * 
from dbo.DelimitedSplit8K('1,8,9',',') 

结果:

+------------+------+ 
| ItemNumber | Item | 
+------------+------+ 
|   1 | 1 | 
|   2 | 8 | 
|   3 | 9 | 
+------------+------+ 

因此,与您的表使用方法:

+-----------+------+ 
| CompeteID | Item | 
+-----------+------+ 
|   1 | 1 | 
|   1 | 8 | 
|   1 | 9 | 
+-----------+------+ 
:在

declare @t table(CompeteID int,TeamID nvarchar(10)); 
insert into @t values(1,'1,8,9'); 

select t.CompeteID 
     ,s.Item 
from @t t 
    cross apply dbo.DelimitedSplit8K(t.TeamID,',') s 

结果

然后,您可以在逻辑的其余部分使用此表格。

+0

对不起,但你能制作一个我需要的程序模型要做什么?因为我不明白那么多的t-sql逻辑,所以我很抱歉。 – Pedro

+0

@Pedro如果你想询问我的咨询费率,那么肯定是的,如果你认为这个网站是一个免费的代码编写服务,然后在您的答案中您可以找到所需的一切,从而开始Google搜索并自行解决问题。 – iamdave