第一步:创建测试存储过程:
CREATE PROCEDURE [dbo].[test]
@deptCode varchar(MAX)
AS
BEGIN
SELECT * from DEPT_INFO_A where DEPT_CODE in (@deptCode)
END
此存储过程只是一个简单的查询
第二步测试:
传入的 @deptCode为:1012001,10435
如图:
测试后发现无法查出对应的数据:
因此修改存储过程:
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:
修改后的sql如下:
SELECT * from DEPT_INFO_A where DEPT_CODE in (SELECT Value FROM dbo.SplitString(@deptCode, ','))
最后in就可以查出想要的结果