If need to use as variables there is 2 nice options:
Procedure MF_SPLIT
CREATE PROC [MF_SPLIT] (@ELS NVARCHAR(MAX)=NULL OUTPUT, @RET NVARCHAR(MAX)=NULL OUTPUT, @PROC NVARCHAR(MAX)=NULL) AS BEGIN
IF @ELS IS NULL BEGIN
PRINT ' @ELS
List of elements in string (OUTPUT)
@RET
Next return (OUTPUT)
@PROC
NULL = '','', content to do split
Example:
DECLARE @NAMES VARCHAR(100) = ''ERICK,DE,VATHAIRE''
DECLARE @N VARCHAR(100)
WHILE @NAMES IS NOT NULL BEGIN
EXEC MF_SPLIT @NAMES OUTPUT, @N OUTPUT
SELECT List = @NAMES, ActiveWord = @N
END'
RETURN
END
SET @PROC = ISNULL(@PROC, ',')
IF CHARINDEX(@PROC, @ELS) = 0 BEGIN
SELECT @RET = @ELS, @ELS = NULL
RETURN
END
SELECT
@RET = LEFT(@ELS, CHARINDEX(@PROC, @ELS) - 1)
, @ELS = STUFF(@ELS, 1, LEN(@RET) + 1, '')
END
Usage:
DECLARE @NAMES VARCHAR(100) = '1,2,3'
DECLARE @N VARCHAR(100)
WHILE @NAMES IS NOT NULL BEGIN
EXEC MF_SPLIT @NAMES OUTPUT, @N OUTPUT
SELECT List = @NAMES, ActiveWord = @N
END
Procedure MF_SPLIT_DO (Depends of MF_SPLIT), less sintax to use BUT the code will be in a string and use default variable "@X"
CREATE PROC MF_SPLIT_DO (@ARR NVARCHAR(MAX), @DO NVARCHAR(MAX)) AS BEGIN
--Less sintax
DECLARE @X NVARCHAR(MAX)
WHILE @ARR IS NOT NULL BEGIN
EXEC MF_SPLIT @ARR OUT, @X OUT
EXEC SP_EXECUTESQL @DO, N'@X NVARCHAR(MAX)', @X
END
END
Usage:
EXEC MF_SPLIT_DO '1,2,3', 'SELECT @X'