SQL SERVER資料庫傳遞逗號分隔引數至儲存過程
阿新 • • 發佈:2019-01-09
背景:
呼叫帶參儲存過程時需要傳遞一個用逗號分隔的字串,平時使用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