Sql 从表中删除ID不基于以逗号分隔的ID列表(即nvarchar)的记录

Sql 从表中删除ID不基于以逗号分隔的ID列表(即nvarchar)的记录,sql,sql-server,Sql,Sql Server,关于SQL Server 2008R2中的以下情况,我需要您的帮助 在SQL中,我有一个ID列表,保存为NVARCHAR(MAX)likeN('1,2,3,4,5') 我读了这个 在此范围内,我为此编写了一个函数: ALTER FUNCTION [dbo].[func$intlist_to_tbl] (@list nvarchar(MAX)) RETURNS @tbl TABLE (number int NOT NULL) AS BEGIN DECLARE @pos i

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

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

我读了这个

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

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

但这是不正确的。

可能是类似的

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

如果你只存储数字-你到底为什么认为你需要
NVARCHAR
??总的空间浪费(事实上,你只是使用了实际需要的两倍的存储空间…)
NVARCHAR
是Unicode,每个字符(或数字)2个字节,只有当你想存储阿拉伯文、希伯来文、中文、日文等内容时才需要。字符…@marc_:n不,我有一个大的存储过程,我在列表中存储了一些ID。也许我必须使用
nvarchar
存储在临时表中。我说得对吗?