背景:
调用带参存储过程时需要传递一个用逗号分隔的字符串,平时使用sql语句时都直接动态拼接然后解决就ok了,问题是存储过程的参数是个字符串 = =
解决办法:写了一个表值函数,将使用逗号分隔的字符串解析为一个表。查询时调用表值函数,将字符串作为参数传入表值函数就ok了
代码:
CREATE FUNCTION [dbo].[Fun_SplitStringToTable] ( @DataStr VARCHAR(5000) )
RETURNS @tbData TABLE ( code VARCHAR(50) )
AS /*
功能:解析以逗号分隔的字符串,返回表变量(格式如"'abc','bbbb'")
*/
BEGIN
SET @DataStr = ISNULL(@DataStr, '')
DECLARE @sTempData VARCHAR(50)
DECLARE @index INT
WHILE CHARINDEX(',', @DataStr) > 0
BEGIN
SET @index = CHARINDEX(',', @DataStr)
SET @sTempData = SUBSTRING(@DataStr, 1, @index - 1)
SET @DataStr = SUBSTRING(@DataStr, @index + 1,
LEN(@DataStr) - @index)
INSERT INTO @tbData
( code )
VALUES ( @sTempData )
END
IF LEN(@DataStr) > 0
BEGIN
INSERT INTO @tbData
( code )
VALUES ( @DataStr )
END
RETURN
END
GO