2017-03-10 100 views
0

到删除的记录我有一个存储过程中进行的插入记录,但以逗号分隔的字符串,分析它,并加入个人记录如何使用IN子句

 Create PROCEDURE [dbo].[Save_List_PMIDS] 
    @MemberID INT= 88888, 
    @PMIDList VARCHAR(MAX)= '12345,56789,67432' 

    AS 
    BEGIN 

    SELECT Split.a.value('.', 'VARCHAR(100)') AS PMID 
    INTO #pmids 
    FROM (SELECT CAST ('<M>' + REPLACE(@PMIDList, ',', '</M><M>') + '</M>' AS XML) AS String 
    ) AS A 
    CROSS APPLY String.nodes('/M') AS Split (a) 

    --DELETE FROM [dbo].[Publication.Person.Include] 
     --WHERE (MemberID = @MemberID) AND PMID IN (@PMIDList); 

INSERT INTO [dbo].[Publication.Person.Include] 
    (PersonID, PMID, MemberID) 
    SELECT @MemberID, PMID, @MemberID 
    FROM #pmids 

    DROP TABLE #pmids 

我的问题是与delete语句。如何将PMIDList字符串转换为IN列表中要使用的数字,以便我不添加重复项?

因此,它看起来像

DELETE FROM [dbo].[Publication.Person.Include] 
    WHERE (MemberID = @MemberID) AND PMID IN (12345,56789,67432); 

在此先感谢

+0

[传递一个varchar全逗号分隔值到SQL Server IN功能]的可能的复制(http://stackoverflow.com/questions/878833/passing -a-varchar-full-of-comma-delimited-values-to-a-sql-server-in-function) – AndreFeijo

+0

http://stackoverflow.com/a/10333589/630284 – SQLMason

+0

可能的重复[SQL in(@变量)查询](http://stackoverflow.com/questions/10333319/sql-in-variable-query) – SQLMason

回答

2

为什么你会使用字符串?您的代码只是把IDS中的表:

DELETE FROM [dbo].[Publication.Person.Include] 
    WHERE MemberID = @MemberID AND 
      PMID IN (SELECT PMID FROM #pmids); 
+0

你的权利 - 我正在努力,它需要成为。您的代码是否正确(选择PMID IN #pmids);我必须将其更改为从#pmid选择PMID) – user1314159

+0

再次感谢您的帮助 – user1314159