SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[ListToTable] (
/*
FUNCTION ListToTable
Usage: select entry from listtotable('abc,def,ghi') order by entry desc
PURPOSE: Takes a comma-delimited list as a parameter and returns the values of that list into a table variable.
*/
@mylist varchar(8000)
)
RETURNS @ListTable TABLE (
seqid int not null,
entry varchar(255) not null)
AS
BEGIN
DECLARE
@this varchar(255),
@rest varchar(8000),
@pos int,
@seqid int
SET @this = ' '
SET @seqid = 1
SET @rest = @mylist
SET @pos = PATINDEX('%,%', @rest)
WHILE (@pos > 0)
BEGIN
set @this=substring(@rest,1,@pos-1)
set @rest=substring(@rest,@pos+1,len(@rest)-@pos)
INSERT INTO @ListTable (seqid,entry) VALUES (@seqid,@this)
SET @pos= PATINDEX('%,%', @rest)
SET @seqid=@seqid+1
END
set @this=@rest
INSERT INTO @ListTable (seqid,entry) VALUES (@seqid,@this)
RETURN
END
在您的 SQL Server 数据库中运行该脚本以创建函数 ListToTable。现在,您可以像这样重写您的查询:
@attributetypeid bigint,
@productid bigint,
@includedids varchar(MAX)
DELETE FROM reltable
WHERE productid = @productid AND
attributetypeid = @attributetypeid AND
attributeid NOT IN (SELECT entry FROM ListToTable(@includedids));
@includedids 是您提供的逗号分隔列表。我在处理列表时一直使用这个函数。请记住,此功能不一定会清理您的输入,它只是在逗号分隔列表中查找字符数据并将每个元素放入记录中。希望这会有所帮助。