Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

13 réponses
Avatar
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

10 réponses

1 2
Avatar
Patrice
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" a écrit dans le message de news:

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


Avatar
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
Avatar
Patrice
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" a écrit dans le message de news:

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


Avatar
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..
Avatar
llopht
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 :)
Avatar
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' ?????
Avatar
Patrice
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" a écrit dans le message de news:

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..


Avatar
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.
Avatar
Patrice
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" a écrit dans le message de news:

J'ai été trop rapide :

CREATE VIEW userVP.viewVPNs
AS
DECLARE @tempT TABLE

me donne :

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


Avatar
Patrice
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" a écrit dans le message de news:

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.


1 2