Accueil > > > SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES
SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES
Information sur la source
Description
Il est souvent nécessaire de transmettre un nombre variable de paramètres à une procédure stockée. Cette source propose une alternative à la création d'une table temporaire.
Source
- 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
Conclusion
L'exemple en commentaire dans le code source permet de filtrer une requête de sélection de façon dynamique (paramètre à valeurs multiples) grâce à la fonction table.
Historique
- 13 novembre 2007 11:25:17 :
- Indentation code source
- 13 novembre 2007 11:48:26 :
- Correction faute de frappe (orthographe)
- 15 novembre 2007 09:50:35 :
- Ajout de la fct RTRIM dans la condition d'insertion du dernier item.
- 15 novembre 2007 09:52:52 :
- Indentation
- 15 novembre 2007 10:03:04 :
- Erreur de manip.
- 15 novembre 2007 10:41:31 :
- Jamais deux sans trois
- 21 novembre 2007 10:34:04 :
- MAJ : suppression des items non déclarés
- 21 novembre 2007 11:14:52 :
- Ajout du nota bene en commentaire dans la source
- 23 décembre 2008 12:10:34 :
- Artefacts d'enregistrement (guillemet)
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[RIA SERVICES] MAITRE - DéTAIL ET DOMAINDATASOURCE[RIA SERVICES] MAITRE - DéTAIL ET DOMAINDATASOURCE par Audrey
A l'occasion d'un projet client, j'ai utilisé RIA Services avec Silverlight 3 (mais cela fonctionne aussi avec la version 4), et je l'ai utilisé pour une interface façon Maitre / Détail. Voici comment j'ai procédé pour arriver à mes fins. Nous allons pren...
Cliquez pour lire la suite de l'article par Audrey CSDL FUNCTIONCSDL FUNCTION par Matthieu MEZIL
Dans mon post précédent , j'ai utilisé une CSDL Function afin de générer une requête SQL avec un DateDiff utilisant la date courante sur la BD à partir d'une requête LINQ. Dans le cadre de ce post , vous avez probablement remarqué que dans le cadre de plu...
Cliquez pour lire la suite de l'article par Matthieu MEZIL LINQ TO ENTITIESLINQ TO ENTITIES par Matthieu MEZIL
Cette semaine je suis à Montréal en tant que speaker sur Entity Framework pour l'évènement confoo . J'en profite pour remercier les organisateurs de cet évènement de m'avoir fait confiance et Access-IT de m'avoir permis d'y participer. En parallèle, j'ai ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010 par neodante
La nouvelle interface d'Office 2010 à amener quelques modifications par rapport à celle de 2007. Certes mineures, ces modifications ont fait disparaître la case à cocher de l'onglet 'Développeur' en première page du panneau du 'bouton Office' (dans Office...
Cliquez pour lire la suite de l'article par neodante [ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1[ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1 par pierre
Si vous avez téléchargé comme moi Microsoft Forums NNTP Bridge V1 avant le 11 mars 2010 (voir [Astuce] Disponibilité de Microsoft Forum NNTP Bridge Version 1.0), un problème de date localisée pour les non anglais était présent. Un patch est disponibl...
Cliquez pour lire la suite de l'article par pierre
Forum
RE : INDEXRE : INDEX par nhervagault
Cliquez pour lire la suite par nhervagault RE : SQLRE : SQL par nhervagault
Cliquez pour lire la suite par nhervagault INDEXINDEX par crn_c21
Cliquez pour lire la suite par crn_c21
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|