j'ai une fonction charger de tester la position de 2 chaine de caractere et de renvoyer la premier de ces 2 positions

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
 
IF EXISTS (SELECT name FROM sysobjects 
         WHERE name = 'EndOfFirstWord' AND type = 'FN')
DROP FUNCTION EndOfFirstWord
GO
CREATE FUNCTION EndOfFirstWord (@chaine VARCHAR(500)) 
RETURNS INT
AS
BEGIN
   DECLARE @ResultAnd INT
   DECLARE @ResultOr  INT
   DECLARE @Result    INT
 
	SET     @Result = 101
 
	-- Je recupere les positions des séparateurs
	SET     @ResultAnd = (SELECT PATINDEX('%&&%', @chaine))
	SET     @ResultOr =  (SELECT PATINDEX('%||%', @chaine))
 
	-- Si un des séparateur est null, je lui affecte la valeur 0
 
	IF	@ResultAnd IS NULL
		SET @ResultAnd = 99
	IF	@ResultOr IS NULL
		SET @ResultOr = 99
 
	-- Je retourne l'index du premier séparateur.
 
	IF @ResultAnd > @ResultOr
		SET @Result   = @ResultOr
 
	ELSE IF @ResultOr > @ResultAnd
		SET @Result = @ResultAnd
 
   RETURN(@Result) 
END
 
GO
 
SELECT [786-3_AA_ArtSafe].[dbo].[EndOfFirstWord] ('Légumiermateriau = ''porcelaine'' || Légumiertravail = ''français''')
La fonction me renvoyait trop fréquement 0 j ai donc tester en changeant les initialisation de mes variables a 99 et 101.
Et étonnanent j'obtiens toujours 0 dans le cas cité au dessus.

J'ai beau retourner le probleme dans tous les sens je ne vois vraiment pas poruquoi.

Any idée ?