Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
使用拆分从MS SQL中删除_Sql_Sql Server_Stored Procedures_Sql Server 2016 - Fatal编程技术网

使用拆分从MS SQL中删除

使用拆分从MS SQL中删除,sql,sql-server,stored-procedures,sql-server-2016,Sql,Sql Server,Stored Procedures,Sql Server 2016,我正在使用 INSERT INTO [dbo].[ADMIN_Publications_email] ([email] ,[pmid] ) SELECT @email, CAST(Item AS NVARCHAR(10)) FROM dbo.Split(@PMID_List, ',') Split是分割字符串的一个非常标准的函数。插入工作正常,但我需要一种方法来删除已添加的记录。这样,如果同样的过程一遍又一遍

我正在使用

       INSERT INTO [dbo].[ADMIN_Publications_email]
       ([email]
       ,[pmid]
       )
      SELECT @email, CAST(Item AS NVARCHAR(10)) 
     FROM  dbo.Split(@PMID_List, ',')  
Split是分割字符串的一个非常标准的函数。插入工作正常,但我需要一种方法来删除已添加的记录。这样,如果同样的过程一遍又一遍地进行,我不会得到一大堆重复的记录。如何根据电子邮件地址和PMID_列表中的值删除。我不能全部删除,因为它们可以以不同的方式添加。我需要像这样的东西

     DELETE FROM [dbo].[ADMIN_Publications_email]
WHERE (email = @Email) AND IN dbo.Split(@PMID_LIST)
拆分在Where子句中。

您可以使用此选项

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

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

我不建议插入和删除。只用

 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)) 
     )

我不建议插入和删除。只用

 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)) 
     )

除了删除前面的所有内容之外,还可以考虑通过添加一个<代码>不存在的到<代码> INSERT < /C>查询,跳过已经插入的数据。(当然,只有当你知道数据是稳定的,这才有效。)你伤了我的心。我认为你要把你的数据规范化:而不是删除前面的所有东西,你也可以考虑跳过已经插入的数据,添加一个<代码>不存在的< /代码>到你的代码> INSERT < /Cord>查询。(当然,只有当你知道数据是稳定的,这才有效。)你伤了我的心。我以为你要规范化你的数据:我想知道这与下面列出的notexists方法相比有多有效?我倾向于像这样删除它们。我刚刚修复了删除查询。如果不尝试,很难说是最好的方法,但是与静态值相比,使用IN会更好。EXISTS可以更好地处理表。我建议不要在插入后删除它们,而不要在插入后删除。我想知道与下面列出的not EXISTS方法相比,这种方法的效率有多高?我倾向于像这样删除它们。我刚刚修复了删除查询。如果不尝试,很难说是最好的方法,但是与静态值相比,使用IN会更好。EXISTS可以更好地处理表。我建议不要插入它们,而不要在插入后删除。请添加更好的解释。请添加更好的解释。