2017-02-10 19 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