对于 SQL Server 2008R2 中的以下情况,我需要您的帮助。
NVARCHAR(MAX)
在 SQL 中,我有一个 id 列表保存为N('1,2,3,4,5')
我读了这篇如何将逗号分隔的 NVARCHAR 转换为 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
但是是不正确的。