- CREATE FUNCTION [dbo].[fctSplitToInt](
- @DelimitedText VARCHAR(MAX), -- liste CSV
- @QuoteChar CHAR(1) -- caractère de délimitation
- ) RETURNS @Items TABLE (Item INTEGER)
- /* -- Retourne la liste sous la forme d'une colonne de nombres
- -- Nota bene : les items non déclarés (chaînes vides ou ne comprenant que le caractère d'espacement) sont ignorés
- -- Cette fonction permet en particulier de transmettre un paramètre « multivalué ».
- -- Exemple d'utilisation :
- USE AdventureWorks;
- DECLARE @ListID VARCHAR(MAX);
- -- Déclaration des valeurs multiples du paramètre
- SET @ListID= '16, 21, 148, 173, 184, 185';
- -- Table retournée
- SELECT Item FROM [dbo].[fctSplitToInt](@ListID, ',');
- -- Transmission du paramètre à valeurs multiples pour filtrer une requête de sélection
- SELECT Title FROM HumanResources.Employee WHERE ManagerID IN (SELECT * FROM [dbo].[fctSplitToInt](@ListID, ','));
- */
- BEGIN
- DECLARE @Item VARCHAR(11)
- WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN
- SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1),
- @DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText))
- IF LEN(RTRIM(@Item)) > 0
- INSERT INTO @Items SELECT CONVERT(INTEGER, @Item)
- END
- -- Dernier item de la liste
- IF LEN(RTRIM(@DelimitedText)) > 0
- INSERT INTO @Items SELECT CONVERT(INTEGER, @DelimitedText)
- RETURN
- END
CREATE FUNCTION [dbo].[fctSplitToInt](
@DelimitedText VARCHAR(MAX), -- liste CSV
@QuoteChar CHAR(1) -- caractère de délimitation
) RETURNS @Items TABLE (Item INTEGER)
/* -- Retourne la liste sous la forme d'une colonne de nombres
-- Nota bene : les items non déclarés (chaînes vides ou ne comprenant que le caractère d'espacement) sont ignorés
-- Cette fonction permet en particulier de transmettre un paramètre « multivalué ».
-- Exemple d'utilisation :
USE AdventureWorks;
DECLARE @ListID VARCHAR(MAX);
-- Déclaration des valeurs multiples du paramètre
SET @ListID= '16, 21, 148, 173, 184, 185';
-- Table retournée
SELECT Item FROM [dbo].[fctSplitToInt](@ListID, ',');
-- Transmission du paramètre à valeurs multiples pour filtrer une requête de sélection
SELECT Title FROM HumanResources.Employee WHERE ManagerID IN (SELECT * FROM [dbo].[fctSplitToInt](@ListID, ','));
*/
BEGIN
DECLARE @Item VARCHAR(11)
WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN
SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1),
@DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText))
IF LEN(RTRIM(@Item)) > 0
INSERT INTO @Items SELECT CONVERT(INTEGER, @Item)
END
-- Dernier item de la liste
IF LEN(RTRIM(@DelimitedText)) > 0
INSERT INTO @Items SELECT CONVERT(INTEGER, @DelimitedText)
RETURN
END