无法将字符串传递给存储过程中的 IN 子句

Cannot pass string to IN clause in stored procedure

我有以下带一个参数的存储过程,我需要在我的 IN 子句中使用它,但这不起作用。我在尝试时遇到此错误。

Conversion failed when converting the varchar value '1,2' to data type int

这是我的存储过程..

CREATE PROCEDURE [dbo].[p_GetSegment] 
    @SegmentIds nVarChar(20)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT dbo.Segment.Name
    FROM dbo.tbl_Category  
    INNER JOIN dbo.Segment ON dbo.tbl_Category.SegmentId
    WHERE (dbo.Segment.Id IN (@SegmentIds))

我传入“1,2”。我怎样才能使这项工作?

在SQL Server 2016+中,您可以使用string_split():

WHERE dbo.Segment.Id IN (SELECT value FROM STRING_SPLIT(@SegmentIds, ','))

为此,您可以使用任何字符串拆分函数。你也可以只使用 `like:

where ',' + @SegmentIds + ',' like '%,' + convert(varchar(255), dbo.Segment.Id) + ',%'