从表中删除记录,其中id不是基于以逗号分隔的id列表(nvarchar)

时间:2013-10-24 07:49:47

标签: sql sql-server

对于SQL Server 2008R2中的以下情况,我需要您的帮助。

在SQL中,我有一个保存为NVARCHAR(MAX)的ID列表,如N('1,2,3,4,5')

我读了这个How to convert comma separated NVARCHAR to table records in SQL Server 2005?

在这个范围内,我为此写了一个函数:

ALTER FUNCTION [dbo].[func$intlist_to_tbl] (@list nvarchar(MAX))
   RETURNS @tbl TABLE (number int NOT NULL) AS
BEGIN
   DECLARE @pos        int,
           @nextpos    int,
           @valuelen   int

   SELECT @pos = 0, @nextpos = 1

   WHILE @nextpos > 0
   BEGIN
      SELECT @nextpos = charindex(',', @list, @pos + 1)
      SELECT @valuelen = CASE WHEN @nextpos > 0
                              THEN @nextpos
                              ELSE len(@list) + 1
                         END - @pos - 1
      INSERT @tbl (number)
         VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
      SELECT @pos = @nextpos
   END
  RETURN
END

好的,我想删除上面列表中找不到ID的一些记录。

怎么做?

我尝试过类似的事情:

DELETE a_ FROM TableA a_
LEFT JOIN func$intlist_to_tbl(@idList) _tmp
ON _tmp.number = a_.ID_
WHERE a_.ID IS NULL

但是不正确。

1 个答案:

答案 0 :(得分:0)

也许类似的东西?

DELETE FROM
  TableA a_
where
  a_.id not in (select number from func$intlist_to_tbl(@idList))