Erreur SQL FUNCTION

cs_jmtoulon Messages postés 85 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 3 août 2010 - 22 oct. 2006 à 01:33
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 - 22 oct. 2006 à 11:36
Bonjour, voici ci desous la function que j'ai crée :

IF

EXISTS
(select
*
from sysobjects
where
name
= N
'funUserListAppart')

DROP
FUNCTION funUserListAppartGO

CREATE

FUNCTION funUserListAppart
(@IDAccount
BIGINT)RETURNS

@User_ListAppartTAB
TABLE(

[sAppart] [VARCHAR]
, [IDLocataire] [BIGINT]
)AS

BEGIN

/* Déclaration standard */

DECLARE @IDAppart
BIGINT

DECLARE @sAdresse
VARCHAR

DECLARE @IDLoc
BIGINT

DECLARE @sLoc
VARCHAR

DECLARE @sOut
VARCHAR

DECLARE @Solde
MONEY/* Déclaration du curseur */

DECLARE C1
CURSOR
FOR

SELECT Appartements
.ID
, BatHTML
+
' '
+ AdresseHTML

FROM Appartements
WHERE Appartements
.IDAccount
= @IDAccount

OPEN C1
/* Parcours la liste des appartements */

FETCH C1
INTO @IDAppart
, @sAdresse

WHILE
@@FETCH_STATUS
= 0

BEGIN/* On récupère l'ientification du locataire qui occupe l'appartement */

SELECT @IDLoc
= Locataires
.ID
FROM Locataires
WHERELocataires

.IDAppart
= @IDAppart
/* Si l'appartements n'est pas vide, alors on récupère l'identité du locataire */

IF @IDLoc
IS
NOT
NULL

BEGIN

SELECT @sLoc
= NomHTML
FROM Locataires
WHERELocataires

.IDAppart
= @IDAppart

SET @sOut
= @sOut
+ @sLoc
+
'
'
+ @sAdresse
/* On récupère le solde du locataire */

SELECT @Solde
=
(SUM(Loyer
)
+
SUM(Charges
))
-
SUM(Paiement
)
FROM Suivi
WHERESuivi

.IDLocataire
= @IDLoc

SET @Solde
=
ISNULL(@Solde
,0
)

IF @Solde
< 0

SET @sOut
= @sOut
+
'Vous devez à ce locataire '

ELSE

SET @sOut
= @sOut
+
'Ce locataire vous doit '

SET @sOut
= @sOut
+ @Solde

END

ELSE

SET @sOut
= @sOut
+ @sAdresse
/* On ajoute tous cela à notre table @User_ListAppartTAB

INSERT INTO @User_ListAppartTAB SELECT @sOut, @IDLoc*/

/* Appartemement suivant*/

FETCH C1
INTO @IDAppart
, @sAdresse

END/* Fermeture du curseur */

CLOSE C1

DEALLOCATE C1
return

END

J'ai l'erreur suivante :

Msg 402, Niveau 16, État 1, Procédure funUserListAppart, Ligne 18

Les types de données text et varchar sont incompatibles dans l'opérateur add.

1 réponse

cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
22 oct. 2006 à 11:36
Bonjour,

Quelle est la structure des tables ?

En essayant un cast sur les champs concaténer de dans la requête :
SELECT

CAST(Appartements
.ID
, BatHTML AS varchar(max))
+
' '
+ AdresseHTML
FROM Appartements
WHERE Appartements
.IDAccount
= @IDAccount
Ou sur l'autre champs, comme je n'ai pas la structure...

Sinon en passant cette requête peut très bien s'écrire sans aucuns curseurs... Mais c'est une autre histoire

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
0
Rejoignez-nous