Bonjour, voici ma function qui renvoie un tableau =E0 2 colonnes
IF EXISTS (select * from sysobjects where name =3D N'funUserListAppart')
DROP FUNCTION funUserListAppart
GO
CREATE FUNCTION funUserListAppart(@IDAccount BIGINT)
RETURNS @User_ListAppartTAB TABLE
([sAppart] [VARCHAR], [IDLocataire] [BIGINT])
AS
BEGIN
/* D=E9claration du curseur */
DECLARE C1 CURSOR FOR
SELECT Appartements.ID, BatHTML + ' ' + AdresseHTML
FROM Appartements WHERE Appartements.IDAccount =3D @IDAccount
OPEN C1
/* Parcours la liste des appartements */
FETCH C1 INTO @IDAppart, @sAdresse
WHILE @@FETCH_STATUS =3D 0
BEGIN
/* On r=E9cup=E8re l'ientification du locataire qui occupe l'appartement
*/
SELECT @IDLoc =3D Locataires.ID FROM Locataires WHERE
Locataires.IDAppart =3D @IDAppart
/* Si l'appartements n'est pas vide, alors on r=E9cup=E8re l'identit=E9
du locataire */
IF @IDLoc IS NOT NULL
BEGIN
SELECT @sLoc =3D NomHTML FROM Locataires WHERE
Locataires.IDAppart =3D @IDAppart
SET @sOut =3D @sOut + @sLoc + '<br />' + @sAdresse
/* On r=E9cup=E8re le solde du locataire */
SELECT @Solde =3D (SUM(Loyer) + SUM(Charges)) - SUM(Paiement) FROM
Suivi WHERE
Suivi.IDLocataire =3D @IDLoc
SET @Solde =3D ISNULL(@Solde,0)
IF @Solde < 0
SET @sOut =3D @sOut + 'Vous devez =E0 ce locataire '
ELSE
SET @sOut =3D @sOut + 'Ce locataire vous doit '
SET @sOut =3D @sOut + @Solde
END
ELSE
SET @sOut =3D @sOut + @sAdresse
/* On ajoute tous cela =E0 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 le message d'erreur suivant :
Msg 402, Niveau 16, =C9tat 1, Proc=E9dure funUserListAppart,
Ligne 18
Les types de donn=E9es text et varchar sont incompatibles dans
l'op=E9rateur add.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
SQLpro
Niaphron a écrit :
Bonjour, voici ma function qui renvoie un tableau à 2 colonnes
...
J'ai le message d'erreur suivant : 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.
Quelqu'un peut m'aider ?
Il est extrémement clair : vous essayer d'additionner (concaténer) des choux (text) et des navets (varchar). Vous avez deux colonnes l'une en varchar l'autre en text quelque part. Comme vous n'avez pas poster la définition de vos tables, impossible de vous aider plus en avant !
De plus la concaténation de char et text est impossible en SQL (et heureusement ! Extrait de l'aide en ligne :
" + (Concaténation de chaînes) Opérateur dans une expression en chaîne, concaténant deux caractères ou plus, ou des chaînes binaires, ou une combinaison de chaînes et de noms de colonnes, pour former une seule expression (un opérateur chaîne).
[...]
Toute expression Microsoft® SQL Server valide de tout type de données de catégorie caractère ou binaire, à l'exception des types de données image, ntext ou text. "
Visiblement vous confondez un serveur SQL et un traitement de texte !
Je voit aussi plusieurs horreurs dans ce code : 1) inutile d'utiliser des curseurs pour ce faire 2) l'utilisation du type MONEY est à proscrire. Utilisez le type DECIMAL. Le type MONEY induit des erreurs d'écart d'arrondis. Il est considéré comme obsolète et ne fait pas partie de la norme SQL. C'est à mon sens une hérésie !
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Niaphron a écrit :
Bonjour, voici ma function qui renvoie un tableau à 2 colonnes
...
J'ai le message d'erreur suivant :
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.
Quelqu'un peut m'aider ?
Il est extrémement clair : vous essayer d'additionner (concaténer)
des choux (text) et des navets (varchar).
Vous avez deux colonnes l'une en varchar l'autre en text quelque part.
Comme vous n'avez pas poster la définition de vos tables, impossible
de vous aider plus en avant !
De plus la concaténation de char et text est impossible en SQL (et
heureusement !
Extrait de l'aide en ligne :
"
+ (Concaténation de chaînes)
Opérateur dans une expression en chaîne, concaténant deux
caractères ou plus, ou des chaînes binaires, ou une combinaison de
chaînes et de noms de colonnes, pour former une seule expression (un
opérateur chaîne).
[...]
Toute expression Microsoft® SQL Server valide de tout type de
données de catégorie caractère ou binaire, à l'exception des types
de données image, ntext ou text.
"
Visiblement vous confondez un serveur SQL et un traitement de texte !
Je voit aussi plusieurs horreurs dans ce code :
1) inutile d'utiliser des curseurs pour ce faire
2) l'utilisation du type MONEY est à proscrire. Utilisez le type
DECIMAL. Le type MONEY induit des erreurs d'écart d'arrondis. Il est
considéré comme obsolète et ne fait pas partie de la norme SQL.
C'est à mon sens une hérésie !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage
SQL
Le site sur le langage SQL et les SGBDR :
http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning,
optimisation
********************* http://www.datasapiens.com ***********************
Bonjour, voici ma function qui renvoie un tableau à 2 colonnes
...
J'ai le message d'erreur suivant : 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.
Quelqu'un peut m'aider ?
Il est extrémement clair : vous essayer d'additionner (concaténer) des choux (text) et des navets (varchar). Vous avez deux colonnes l'une en varchar l'autre en text quelque part. Comme vous n'avez pas poster la définition de vos tables, impossible de vous aider plus en avant !
De plus la concaténation de char et text est impossible en SQL (et heureusement ! Extrait de l'aide en ligne :
" + (Concaténation de chaînes) Opérateur dans une expression en chaîne, concaténant deux caractères ou plus, ou des chaînes binaires, ou une combinaison de chaînes et de noms de colonnes, pour former une seule expression (un opérateur chaîne).
[...]
Toute expression Microsoft® SQL Server valide de tout type de données de catégorie caractère ou binaire, à l'exception des types de données image, ntext ou text. "
Visiblement vous confondez un serveur SQL et un traitement de texte !
Je voit aussi plusieurs horreurs dans ce code : 1) inutile d'utiliser des curseurs pour ce faire 2) l'utilisation du type MONEY est à proscrire. Utilisez le type DECIMAL. Le type MONEY induit des erreurs d'écart d'arrondis. Il est considéré comme obsolète et ne fait pas partie de la norme SQL. C'est à mon sens une hérésie !
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************