0

SQL Server 2008R2 での以下の状況について、ご協力をお願いします。

SQLでは、次のNVARCHAR(MAX)ように保存されたIDのリストがありますN('1,2,3,4,5')

これを読みました SQL Server 2005でコンマ区切りのNVARCHARをテーブルレコードに変換する方法?

このスコープでは、このための関数を書きました:

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

しかし、正しくありません。

4

1 に答える 1