Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 传递字符串时从表中删除行_Sql_Tsql - Fatal编程技术网

Sql 传递字符串时从表中删除行

Sql 传递字符串时从表中删除行,sql,tsql,Sql,Tsql,大家好,我想创建一个过程,接收一个int和一个string,其ID如下: IntCompeteID=1 StringTeamIDs=“1,8,9” 这意味着有3个TeamID,TeamID=1、TeamID=8和TeamID=9 这是我的DBModel: 所以我想做的是在TeamCompetie中插入SportID和CompetieID,如果没有相等的SportID和CompetieID 像这样: TeamCompeteID TeamID CompeteID 1

大家好,我想创建一个过程,接收一个
int
和一个
string
,其ID如下:

Int
CompeteID=1

String
TeamIDs=“1,8,9”

这意味着有3个TeamID,TeamID=1、TeamID=8和TeamID=9

这是我的DBModel:

所以我想做的是在TeamCompetie中插入SportID和CompetieID,如果没有相等的SportID和CompetieID

像这样:

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

6 8 1首先,以这种方式传递数据是一个非常糟糕的主意。您应该真正尝试将数据标准化,并在每个字段中有一个值

但是,如果您无法避免这种情况,我建议您使用字符串拆分函数,例如,如果您使用的是2016年之前的SQL Server版本(),它将返回一个可以从给定字符串和分隔符连接到的表

使用上面Jeff的函数:

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
结果:

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

然后,您可以在
更新
/
插入
/
删除
逻辑的其余部分中使用此表。

对不起,您能为我需要执行的过程建立一个模型吗?因为我不太懂t-sql逻辑,我很抱歉。@Pedro如果你想询问我的咨询费率,那就一定要问。如果你认为这个网站是一个免费的代码编写服务,那么就不是了。你在我的答案中已经有了所有你需要的东西,可以开始用谷歌搜索并自己计算出答案。不够清晰。例如,添加15行,我们可以在一个表中看到所有变体。我不确定第一部分和第二部分(可能是第_number()行(按TeamId划分,按TeamCompeteId描述划分CompeteId顺序)以及我没有得到的第三部分。