Colonne auto incrémentée dans une vue...

Le
llopht
Salut à tous,

J'ai une vue qui fait l'union de 3 tables pour récupérer une
information. Est t'il possible d'ajouter une colonne auto incrémentée
dans celle-ci ?

Merci pour l'info.

Jérôme
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #11851621
Le mieux est sans doute d'expliquer d'abord le but de cette colonne (auto
incrémentée par rapport à quoi ?) Si c'est pour une numérotation des lignes,
peut-être un ROW_NUMBER sur cette union. Si c'est pour avoir un id, je
prendrais l'id des lignes sous-jacentes quitte à avoir un champ
suppplémentaire créé dans l'union et indiquant la "nature" de chaque ligne.
Si c'est pour avoir un numéro id auto-incrémentée dans la totalité de la
vue, je ne vois pas à brûle pourpoint de solution bien directe (ni même
l'utilité que cela pourrait avoir ?).

--
Patrice

"llopht"
Salut à tous,

J'ai une vue qui fait l'union de 3 tables pour récupérer une information.
Est t'il possible d'ajouter une colonne auto incrémentée dans celle-ci ?

Merci pour l'info.

Jérôme


llopht
Le #11851591
En fait je veux simplement une colonne de numération de la ligne courante.

En gros si j'ai :

Table A Table B Table C
Donnée A1 Donnée B1 Donnée C1
Donnée A2 Donnée B2
Donnée A3

Et que je fais un union des tables je voudrais ceci :

NLigne Libelle
1 Donnée A1
2 Donnée A2
3 Donnée A3
4 Donnée B1
5 Donnée B2
6 Donnée C1


Patrice a écrit :
Le mieux est sans doute d'expliquer d'abord le but de cette colonne (auto
incrémentée par rapport à quoi ?) Si c'est pour une numérotation des lignes,
peut-être un ROW_NUMBER sur cette union.



ROW_NUMBER ? Je trouve rien dans la doc à ce sujet ??

Merci Patrice
Patrice
Le #11851581
Ok, et quelle version ? C'est nouveau dans la 2005.

Pour la 2000, c'est sans doute plus coûteux de le faire dans la procédure
(et là encore selon l'usage exact de cette colonne, il serait peut-être
possible de numéroter les lignes à la volée côté client ; si les données
sont récupérées en .NET dans un datatable, le n° est l'index dans le tableau
des lignes).

--
Patrice

"llopht"
En fait je veux simplement une colonne de numération de la ligne courante.

En gros si j'ai :

Table A Table B Table C
Donnée A1 Donnée B1 Donnée C1
Donnée A2 Donnée B2
Donnée A3

Et que je fais un union des tables je voudrais ceci :

NLigne Libelle
1 Donnée A1
2 Donnée A2
3 Donnée A3
4 Donnée B1
5 Donnée B2
6 Donnée C1


Patrice a écrit :
Le mieux est sans doute d'expliquer d'abord le but de cette colonne (auto
incrémentée par rapport à quoi ?) Si c'est pour une numérotation des
lignes, peut-être un ROW_NUMBER sur cette union.



ROW_NUMBER ? Je trouve rien dans la doc à ce sujet ??

Merci Patrice


llopht
Le #11870041
Patrice a écrit :
Ok, et quelle version ? C'est nouveau dans la 2005.




2000 :'(

Pour la 2000, c'est sans doute plus coûteux de le faire dans la procédure



Y a une méthode ?

(et là encore selon l'usage exact de cette colonne, il serait peut-être
possible de numéroter les lignes à la volée côté client ; si les données
sont récupérées en .NET dans un datatable, le n° est l'index dans le tableau
des lignes).



Humm le problème c'est que différents languages risques de s'y connecter..
llopht
Le #11870021
En fait j'ai fais une table temporaire et j'ai inseréré les données
dedans... Je suppose que ça ira... pour l'instant :)
llopht
Le #11870011
J'ai été trop rapide :

CREATE VIEW userVP.viewVPNs
AS
DECLARE @tempT TABLE

me donne :

Erreur 156 : Syntaxe incorrecte vers le mot clé 'DECLARE' ?????
Patrice
Le #11870001
Et cette numérotation servirait à quoi ?

Sinon par exemple :
http://support.microsoft.com/kb/186133/en-us (à partir de la méthode 2 qui
n'utilise pas la fonction SQL Server, en gros la requête compte les lignes
qui viennent avant une ligne donnée, attention à la numérotation des
éventuels doublons, il faudrait que la comparaison utilisée pour "classer"
les lignes ne donne jamais d'égalité).


---
Patrice

"llopht"
Patrice a écrit :
Ok, et quelle version ? C'est nouveau dans la 2005.




2000 :'(

Pour la 2000, c'est sans doute plus coûteux de le faire dans la procédure



Y a une méthode ?

(et là encore selon l'usage exact de cette colonne, il serait peut-être
possible de numéroter les lignes à la volée côté client ; si les données
sont récupérées en .NET dans un datatable, le n° est l'index dans le
tableau des lignes).



Humm le problème c'est que différents languages risques de s'y connecter..


llopht
Le #11869991
Patrice a écrit :
Et cette numérotation servirait à quoi ?



Elle permet à une application de répartir à l'endroit ou elle était en
cas de soucis.
Patrice
Le #11869981
Une vue est une instruction SQL enregistrée (pas de "code" à proprement
parler donc on ne peut avoir qu'un select derrière). Tu peux simuler une vue
contenant des instructions en créant une fonction.

--
Patrice

"llopht"
J'ai été trop rapide :

CREATE VIEW userVP.viewVPNs
AS
DECLARE @tempT TABLE

me donne :

Erreur 156 : Syntaxe incorrecte vers le mot clé 'DECLARE' ?????


Patrice
Le #11869971
Sauf peut-être si un changement dans les données change entretemps la
numérotation ? (par exemple si un jour des lignes sont "archivées", la
numérotation ne sera plus la même)

J'essaierai plutôt :
- soit d'avoir une date de traitement dans les données pour "marquer" les
lignes traitées (et la date est souvent pratique pour voir le degré
d'actualité des données, j'ai récupéré une fois une application qui permet
de marquer des projets comme supprimés mais on a aucune idée si le projet
est supprimée logiquement depuis 2 jours ou 2 ans sans faire d'autres
requêtes).
- soit d'utiliser une donnée toujours croissante avec chaque nouvelle ligne,
qui ne change jamais après création et qui de préférence est unique (par
exemple un id autoincrémenté stocké dans chaque table quitte à interdire les
id négatifs).

Il n'y a pas déjà une pk quelque part ?

--
Patrice

"llopht"
Patrice a écrit :
Et cette numérotation servirait à quoi ?



Elle permet à une application de répartir à l'endroit ou elle était en cas
de soucis.


Publicité
Poster une réponse
Anonyme