Удалить из MS SQL с помощью Split - PullRequest
0 голосов
/ 24 мая 2018

Я использую

       INSERT INTO [dbo].[ADMIN_Publications_email]
       ([email]
       ,[pmid]
       )
      SELECT @email, CAST(Item AS NVARCHAR(10)) 
     FROM  dbo.Split(@PMID_List, ',')  

Split - довольно стандартная функция для разделения строки.Вставка работает нормально, но мне нужен способ удалить запись, если она уже добавлена.Таким образом, если один и тот же процесс повторяется снова и снова, я не получаю целую кучу повторяющихся записей.Как я могу удалить на основе адреса электронной почты и значения в PMID_list.Я не могу удалить все, потому что они могут быть добавлены другим способом.Мне нужно что-то вроде

     DELETE FROM [dbo].[ADMIN_Publications_email]
WHERE (email = @Email) AND IN dbo.Split(@PMID_LIST)

Где разделение в предложении where.

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Я бы не рекомендовал вставлять и удалять.Просто используйте

 INSERT INTO [dbo].[ADMIN_Publications_email]
       ([email]
       ,[pmid]
       )
      SELECT @email, CAST(Item AS NVARCHAR(10)) 
     FROM  dbo.Split(@PMID_List, ',')  
     WHERE NOT EXISTS 
     (
        select 1 from [dbo].[ADMIN_Publications_email] where [email]=@email and [pmid]=CAST(Item AS NVARCHAR(10)) 
     )
0 голосов
/ 24 мая 2018
DELETE FROM [dbo].[ADMIN_Publications_email] WHERE pmid IN (SELECT Item FROM  @PMID_LIST) OR email = @Email
0 голосов
/ 24 мая 2018

Вы можете использовать это.

DELETE FROM [dbo].[ADMIN_Publications_email]
WHERE (email = @Email) AND [pmid] IN (SELECT CAST(Item AS NVARCHAR(10)) FROM dbo.Split(@PMID_LIST))
...