将 varchar 值 ',1,2,3' 转换为数据类型 int 时转换失败

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

在 IN 条件下尝试使用逗号分隔参数时会出现此错误

我正在将 varchar 参数传递给如下所示的存储过程

,1,2,3

我想知道它是否包含 1(它并不总是包含 1)

在 TSQL 中最简单的方法是什么?

declare @Nums varchar(max)=',1,2,3'
if 1 in (@Nums) -- conversion error
BEGIN   
    select * from TestTable
END

您将需要使用 LIKE 来查看字符串是否包含字符 1。请注意,这也将匹配 12 或任何包含字符“1”的字符串。

declare @Nums varchar(max)=',1,2,3'
if @Nums LIKE '%1%'
BEGIN   
    select * from TestTable
END

如需匹配全号:

CREATE FUNCTION [dbo].[Split_String]
(
    @ItemList NVARCHAR(4000), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(4000)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END


DECLARE @Nums VARCHAR(MAX) = ',1,2,3'

DECLARE @NumberTable TABLE (item INT)

INSERT INTO @NumberTable
  SELECT TRY_CAST(Item AS INT)
  FROM dbo.Split_String(@Nums, ',')

IF (SELECT 1 FROM @NumberTable WHERE item = 1) = 1
  BEGIN
    select * from TestTable
  END

您可以使用 CHARINDEX.

declare @Nums varchar(max)=',1,2,3'
IF CHARINDEX(',1,', @Nums+',') > 0
BEGIN   
    select * from TestTable
END