SqlServer存储过程中使用in

 第一步:创建测试存储过程:

CREATE PROCEDURE [dbo].[test]
@deptCode varchar(MAX)

AS
BEGIN

SELECT * from DEPT_INFO_A where DEPT_CODE in (@deptCode)

END

此存储过程只是一个简单的查询

第二步测试:

传入的 @deptCode为:1012001,10435

如图:

SqlServer存储过程中使用in_第1张图片

测试后发现无法查出对应的数据:

SqlServer存储过程中使用in_第2张图片

因此修改存储过程:

1.增加一个函数:

-- 实现字符串拆分操作,在存储过程中使用in  需要用到此函数
CREATE FUNCTION [dbo].[SplitString] (@String varchar(max), @Separator char(1))
RETURNS @Results table (Value varchar(max))
AS
BEGIN
    DECLARE @Index int
    DECLARE @Value varchar(max)
    SET @Index = CHARINDEX(@Separator, @String)
    WHILE (@Index > 0)
    BEGIN
        SET @Value = SUBSTRING(@String, 1, @Index - 1)
        INSERT INTO @Results (Value) VALUES (@Value)
        SET @String = SUBSTRING(@String, @Index + 1, LEN(@String))
        SET @Index = CHARINDEX(@Separator, @String)
    END
    INSERT INTO @Results (Value) VALUES (@String)
    RETURN
END

2.修改原有存储过程里的sql:

SqlServer存储过程中使用in_第3张图片

修改后的sql如下:

SELECT * from DEPT_INFO_A where DEPT_CODE in (SELECT Value FROM dbo.SplitString(@deptCode, ','))

最后in就可以查出想要的结果

你可能感兴趣的:(sqlserver,SqlServer存储过程)