1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| --==========================================================================--
-- Fonction scalaires de mise à plat de tous les prénoms d'une personne
--==========================================================================--
CREATE FUNCTION S_PRS.F_LISTE_PRENOMS (@PRS_ID INT,
@USUEL BIT)
RETURNS VARCHAR(max)
AS
/******************************************************************************
* Fonction scalaire récupérant tous les prénoms d'une personne *
*******************************************************************************
* Fred. Brouard - http://sqlpro.developpez.com - www.sqlspot.com - 2009-04-20 *
*******************************************************************************
* @PRS_ID id de la personne physique *
* @USUEL : Si 1 prénom usuels selement *
* Si 0 autres prénoms *
* Si NULL tous les prénoms, l'usuel en premier *
******************************************************************************/
BEGIN
DECLARE @PRENOMS VARCHAR(max);
SET @PRENOMS = '';
-- concaténation des prénoms
SELECT /* 37E203D2-440F-4567-A81E-A17BF9BBE24E */
@PRENOMS = @PRENOMS + PRN_LIBELLE
+ CASE PPN_COMPOSE WHEN 1 THEN '-' ELSE ', ' END
FROM S_PRS.T_J_PRS_PRENOMMEE_PRN_PPN AS PPN
INNER JOIN S_REF.T_R_PRENOM_PRN AS PRN
ON PPN.PRN_ID = PRN.PRN_ID
WHERE PPN_USUEL = COALESCE(@USUEL, PPN_USUEL)
AND PPN.PRS_ID = @PRS_ID
ORDER BY PPN_USUEL DESC, PPN_ORDRE;
-- si plus de 128 caractères
IF LEN(@PRENOMS) > 128
BEGIN
SET @PRENOMS = SUBSTRING(@PRENOMS, 1, 128);
SET @PRENOMS = SUBSTRING(@PRENOMS, 1, LEN(@PRENOMS) - CHARINDEX(REVERSE(@PRENOMS), ' '));
END
-- suppression du caractère virgule finale
SET @PRENOMS = CASE
WHEN @PRENOMS = '' THEN NULL
ELSE SUBSTRING(@PRENOMS, 1, LEN(@PRENOMS) - 1)
END;
RETURN @PRENOMS;
END
GO |
Partager