Bonjour à tous,
Je cherche à tester des numéros de téléphone dans plusieurs tables et dans plusieurs champs.
J'ai besoin de créer un programme que revoie un booléen 0/1 en fonction de la présence d'un indicatif dans le numéro de téléphone.
Exemple : 0655443322 > résultat = 0
0033655443322 > Résultat =1
Pour ce faire, j'ai une table contenant la liste des indicatifs qui m'intéresses.
J'ai testé de mettre en place un fonction scalaire mais il est impossible d'exécuter du code dynamique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CREATE TABLE [QDD].dbo.QDD_Liste_Indicatifs_telephone ( [Id] BIGINT NOT NULL IDENTITY(10000000000,1) , [Valeur] NVARCHAR(20) , [Taille] NVARCHAR(20) , [Region] NVARCHAR(50) CONSTRAINT [PK_QDD_Liste_Indicatifs_telephone] PRIMARY KEY NONCLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] INSERT [QDD].[dbo].QDD_Liste_Indicatifs_telephone VALUES ( '33' , 2 , 'Hexagone' ) , ( '033' , 3 , 'Hexagone' ) , ( '0033' , 4 , 'Hexagone' ) , ( '596' , 3 , 'Martinique' ) , ( '590' , 3 , 'Guadeloupe' ) , ( '262' , 3 , 'Reunion' ) , ( '594' , 3 , 'Guyane' ) , ( '508' , 3 , 'Saint_Pierre_et_Miquelon' )
Et je n'arrive pas non plus à le faire via un procédure stockée :
Si vous avez une idée ou une méthode pour faire ce genre de chose, merci beaucoup par avance :-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 USE QDD ; GO /*Suppression de la SP existante */ DROP PROCEDURE dbo.[Indicatifs_Telephone] ; GO CREATE PROCEDURE [Indicatifs_Telephone] @Valeur nvarchar(50) AS DECLARE @SQL_INDICATIF NVARCHAR(4000) = N'' SELECT @SQL_INDICATIF = @SQL_INDICATIF + N' SUBSTRING (['+@Valeur+'], 1 , '+[Taille]+') = ('''+[Valeur]+''' ) OR ' FROM [dbo].[QDD_Liste_Indicatifs_telephone] ; SET @SQL_INDICATIF = LEFT(@SQL_INDICATIF, LEN(@SQL_INDICATIF) - 3); --PRINT @SQL_INDICATIF ; DECLARE @Resultat NVARCHAR(2) ; DECLARE @SQL_INDICATIF_2 NVARCHAR(4000) = N' IF '+@SQL_INDICATIF+' BEGIN SET @Resultat = ''1'' ; ELSE SET @Resultat = ''0'' ; END ' ; PRINT @SQL_INDICATIF_2 ; --EXEC @SQL_INDICATIF_2 ; PRINT @Resultat ; SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO EXEC [QDD].[dbo].[Indicatifs_Telephone] @Valeur = '0655443322' ; GO
Il faut que cela ne soit pas trop gourmant car je vais faire appel à cette fonctionnalité sur des grosses tables de données clients.
Mille merci pour vos idée :-)
Partager