OVH Cloud OVH Cloud

Concaténation de champs

10 réponses
Avatar
Zibou II
bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II

____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour ***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com

10 réponses

Avatar
yan
bonjour,

si tu inseres tous les champs d'un coup, il suffit de faire
"insert into TA_TABLE (Champ01,Champ02,Champ03,Champ04,Champ0x) values
(val01,val02,val03,val04,val02+val04)"

sinon faut passer par un trigger (voir aide)



"Zibou II" a écrit dans le message de
news:c60nk5$up9$
bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II




____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour


***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur


étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com




Avatar
Fred BROUARD
Salut,

yan a écrit:
bonjour,

si tu inseres tous les champs d'un coup, il suffit de faire
"insert into TA_TABLE (Champ01,Champ02,Champ03,Champ04,Champ0x) values
(val01,val02,val03,val04,val02+val04)"



Ne marchera pas si une des colonnes est NULL car il y aura propagation
du NULL. Donc faire des COALESCE.

A +


--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************


sinon faut passer par un trigger (voir aide)



"Zibou II" a écrit dans le message de
news:c60nk5$up9$

bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II





____________________________________________________________________________

______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour



***

*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur



étranger

inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com









Avatar
Fred BROUARD
Un trigger serait adapté car il faut synchroniser aussi bien l'INSERT
que l'UPDATE.

Un petit exemple dans le cadre d'une table d'adresse :

*********************************************************************/
/* trigger sur ADRESSE pour concaténation des éléments de l'adresse */
/*********************************************************************/
CREATE TRIGGER TRG_ADRESSE_IU ON T_ADRESSE_ADR
FOR INSERT, UPDATE
AS

UPDATE T_ADRESSE_ADR
SET ADR_CALC_ADRESSE = COALESCE(ADR.ADR_LIGNE1, '') + ' '
+ COALESCE(ADR.ADR_LIGNE2, '') + ' '
+ COALESCE(ADR.ADR_LIGNE3, '') + ' '
+ COALESCE(ADR.ADR_LIGNE4, '') + ' '
+ COALESCE(ADR.ADR_CP, '') + ' '
+ COALESCE(ADR.ADR_VILLE, '') + ' '
+ COALESCE(ADR.ADR_CEDEX, '')
FROM T_ADRESSE_ADR ADR
INNER JOIN INSERTED I
ON ADR.ADR_ID = I.ADR_ID

En fait les adresses sont sur plusieurs lignes de 38 caractères (norme
La Poste), mais pour faire des recherches sur les adresses il est plus
partique de mettre ces lignes concaténées dans une seule colonnes de nom
ADR_CALC_ADRESSE, qui concatène toutes les colonnes ADR_LIGNEn + ADR_CP
+ ADR.ADR_VILLE + ADR_CEDEX, sans oublier de dénullifier, car en cas de
présence d'un seul marqueur NULL dans l'une des colonnes, le résultats
vaudra NULL !

A +


--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Zibou II a écrit:
bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II

____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour ***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com




Avatar
bruno reiter [MVP]
regardes dans create table (ou alter) à computed_column, tu trouveras
peut-etre ton bonheur

br

"Zibou II" wrote in message
news:c60nk5$up9$
bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II




____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour


***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur


étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com




Avatar
Habib ZMERLI
Regarde aussi le "Before Trigger"; nouvelle fonctionnalité dans SQL SERVER
2000

Habib ZMERLI

"Zibou II" wrote in message
news:c60nk5$up9$
bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II




____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour


***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur


étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com




Avatar
Fred BROUARD
Les triggers de type before n'existent pas dans SQL Server.

Seuls les triggers AFTER et INSTEAD sont implémentés.

Pour simuler un trigger BEFORE, lire :
http://sqlpro.developpez.com/TransactSQL/SQL_MSTransactSQL.html#5.4

A +



Habib ZMERLI a écrit:
Regarde aussi le "Before Trigger"; nouvelle fonctionnalité dans SQL SERVER
2000

Habib ZMERLI

"Zibou II" wrote in message
news:c60nk5$up9$

bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II





____________________________________________________________________________

______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour



***

*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur



étranger

inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com










--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
el.c. - myLittleTools.net
> A la saisie de champs j'aimerais qu'une concaténation de champs se
fasse automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03,
Champ04, etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive
par exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?



En complément des propositions faires par Fred et Bruno, je pense qu'il
pourrait être utile de jeter un oeil aux colonnes calculées

un article expliquant bien le concept :
http://www.sqlservercentral.com/columnists/dPriyankara/udfascomputedcolu
mn.asp

il suffirait donc de créer une udf

CREATE FUNCTION stringconcat(@str1 varchar, @str2 varchar)
RETURNS varchar()
WITH SCHEMABINDING
AS
BEGIN
RETURN @str1 + @str2
END

puis de rajouter la colonne champ0x

ALTER TABLE yourTable
ADD champ0x AS dbo.fstringconcat(Champ02, Champ04)

Ca vaut la peine d'essayer...

cordialement
el.c.

--
// myLittleTools.net : leading provider of web-based applications.
// myLittleAdmin : online MS SQL manager
// http://www.mylittletools.net
//
Avatar
bruno reiter [MVP]
en anglais : computed column ;-)

br

"el.c. - myLittleTools.net" wrote in
message news:
> A la saisie de champs j'aimerais qu'une concaténation de champs se
> fasse automatiquement.
> exemple:
> j'insère des données dans les champs Champ01, Champ02, Champ03,
> Champ04, etc..
> et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive
> par exemple, la concaténation de Champ02 et Champ04 après leur saisie.
> Est-ce possible ?
> Si oui comment ?

En complément des propositions faires par Fred et Bruno, je pense qu'il
pourrait être utile de jeter un oeil aux colonnes calculées

un article expliquant bien le concept :
http://www.sqlservercentral.com/columnists/dPriyankara/udfascomputedcolu
mn.asp

il suffirait donc de créer une udf

CREATE FUNCTION stringconcat(@str1 varchar, @str2 varchar)
RETURNS varchar()
WITH SCHEMABINDING
AS
BEGIN
RETURN @str1 + @str2
END

puis de rajouter la colonne champ0x

ALTER TABLE yourTable
ADD champ0x AS dbo.fstringconcat(Champ02, Champ04)

Ca vaut la peine d'essayer...

cordialement
el.c.

--
// myLittleTools.net : leading provider of web-based applications.
// myLittleAdmin : online MS SQL manager
// http://www.mylittletools.net
//




Avatar
el.c. - myLittleTools.net
bruno reiter [MVP] typed:
en anglais : computed column ;-)



oops... j'avais zappé ta réponse ! et seulement vu des solutions avec
triggers !
désolé...

el.c.
Avatar
Steve Kass
Zibou,

Si vous voulez que Champ0x contienne toujours cette concaténation,
vous pouvez définir Champ0x comme colonne calculée, et éviter le
stockage de données identiques:

create table T (
Champ01 varchar(20),
Champ02 varchar(20),
...
Champ0x as Champ02 + Champ04
)

(ou coalesce(Champ02,'') + coalesce(Champ04,''), selon les besoins)

Steve Kass
Drew University

Zibou II wrote:

bonjour,
Est-ce quelqu'un pourrait m'aider sur ce problème.

A la saisie de champs j'aimerais qu'une concaténation de champs se fasse
automatiquement.
exemple:
j'insère des données dans les champs Champ01, Champ02, Champ03, Champ04,
etc..
et je voudrais qu'automatiquement le dernier champ (Champ0x) reçoive par
exemple, la concaténation de Champ02 et Champ04 après leur saisie.
Est-ce possible ?
Si oui comment ?
Merci de votre aide à tous .
Zibou II

____________________________________________________________________________
______________Rs
*** Internet-Security NAV ***
*** Ce message a été contrôlé et ne possède aucun virus connu à ce jour ***
*** IMPORTANT : N'ouvrez jamais les messages provenant d'expéditeur étranger
inconnu ou sans objet ***
*** Roysoft © jlr 2004 *** www.roysoft.com