2017-02-10 1 views
-1

Привет всем я хочу, чтобы создать процедуру, которая принимает int и string с идентификаторами, когда они, как это:Удаление строк из таблицы, когда я прохожу строку

Int CompeteID = 1

String TeamIDs = "1,8,9"

Значение есть 3 TeamIDs, TeamID = 1, TeamID = 8 и TeamID = 9.

Вот мой DBModel: https://i.gyazo.com/7920cca8000436cfe207353aaa7d172f.png

Так что я хочу вставить в TeamCompete, SportID и CompeteID, когда нет равных 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 

Я надеюсь, что вы U объяснил мое объяснение.

+0

Недостаточно ясно. Добавьте, например, 15 строк, где мы можем видеть все варианты в одной таблице. Я не уверен в первой и второй части (может быть, row_number() over (раздел TeamId, CompeteId order by TeamCompeteId desc), а третья часть я не получил. – Deadsheep39

ответ

0

Прежде всего, передача данных таким образом - очень плохая идея. Вы действительно должны попытаться нормализовать свои данные и иметь одно значение в каждом поле.

Однако, если вы не можете избежать этого, я бы порекомендовал вам использовать функцию строки расщепления, такие как Jeff Moden's, если вы находитесь на версии SQL Server до 2016 (the string_split is built into SQL Server 2016), которая возвращает таблицу вы можете присоединиться к из заданной строки и разделитель.

Использование функции Джеффа выше:

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

Результаты в:

+------------+------+ 
| ItemNumber | Item | 
+------------+------+ 
|   1 | 1 | 
|   2 | 8 | 
|   3 | 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 

Результаты в:

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

Вы можете использовать эту таблицу в остальной части вашей логики update/insert/delete.

+0

Извините, но вы можете сделать модель процедуры, в которой я нуждаюсь потому что я не понимаю, что много логики t-sql, извините. – Pedro

+0

@Pedro Если вы хотите узнать о моих консультационных ставках, то да во что бы то ни стало. Если вы считаете, что этот сайт является бесплатным кодом а затем нет. У вас есть все, что вам нужно в моем ответе, чтобы начать Googling и выполнить ответ самостоятельно. – iamdave