Requete SQL Server 2005

Le
EmanuelL
Bonjour à Tous,

Encore moi, je suis complètement coinçé.
J'aimerai créer une requête qui récupère le dernier no de
DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est
NOT NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement
suivant

Voici ma requête, et ça ne focntionne pas :

INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
([DRITTRECH_NR]
,[FAK_NR]
,[MWST_NR]
,[PROJEKT_NR]
,[ARTIKEL_NR]
,[ABRDATUM]
,[TEXT]
SELECT
(SELECT MAX([DRITTRECH_NR]) + 1 FROM
[FiducDB1].[dbo].[DRITTRECH_EL])
,NULL
,1
,Client_No
,NULL
,GETDATE()
,'Forfait administration'
FROM [FiducDB1].[dbo].[ForfAdminIntern]
WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009

Est-il possible de le faire avec T-SQL ou avez-vous une autre solution?

PS: Je ne veux modifier la struture de cette table, car l'idéal était
que DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.

Merci d'avance.;-)

--

*!* --
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #18378851
Je crois comprendre que le problème est que le MAX va être calculé une fois
et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
sélectionnées dans ForfAdminIntern.

Si c'est bien cela il faudrait donc éventuellement numéroter également les
lignes sélectionnées pour y ajouter la valeur de base et avoir un
DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
(http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'assurer
que les n° sont uniques...

Effectivement dommage ne de pas utiliser un n° autoincrémenté.

--
Patrice

"EmanuelL" groupe de discussion :
Bonjour à Tous,

Encore moi, je suis complètement coinçé.
J'aimerai créer une requête qui récupère le dernier no de
DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est NOT
NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement suivant...

Voici ma requête, et ça ne focntionne pas :

INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
([DRITTRECH_NR]
,[FAK_NR]
,[MWST_NR]
,[PROJEKT_NR]
,[ARTIKEL_NR]
,[ABRDATUM]
,[TEXT]
SELECT
(SELECT MAX([DRITTRECH_NR]) + 1 FROM
[FiducDB1].[dbo].[DRITTRECH_EL])
,NULL
,1
,Client_No
,NULL
,GETDATE()
,'Forfait administration'
FROM [FiducDB1].[dbo].[ForfAdminIntern]
WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009

Est-il possible de le faire avec T-SQL ou avez-vous une autre solution?

PS: Je ne veux modifier la struture de cette table, car l'idéal était que
DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.

Merci d'avance.;-)

--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org




EmanuelL
Le #18379821
Merci Patrice,

Tu as saisie mon problème, je ne connaissais pas ROW_NUMBER, je le
tersterai demain au bureau.

A+

Patrice a pensé très fort :
Je crois comprendre que le problème est que le MAX va être calculé une fois
et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
sélectionnées dans ForfAdminIntern.

Si c'est bien cela il faudrait donc éventuellement numéroter également les
lignes sélectionnées pour y ajouter la valeur de base et avoir un
DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
(http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'assurer que
les n° sont uniques...

Effectivement dommage ne de pas utiliser un n° autoincrémenté.

--
Patrice

"EmanuelL" de discussion :
Bonjour à Tous,

Encore moi, je suis complètement coinçé.
J'aimerai créer une requête qui récupère le dernier no de
DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est NOT
NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement suivant...

Voici ma requête, et ça ne focntionne pas :

INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
([DRITTRECH_NR]
,[FAK_NR]
,[MWST_NR]
,[PROJEKT_NR]
,[ARTIKEL_NR]
,[ABRDATUM]
,[TEXT]
SELECT
(SELECT MAX([DRITTRECH_NR]) + 1 FROM
[FiducDB1].[dbo].[DRITTRECH_EL])
,NULL
,1
,Client_No
,NULL
,GETDATE()
,'Forfait administration'
FROM [FiducDB1].[dbo].[ForfAdminIntern]
WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009

Est-il possible de le faire avec T-SQL ou avez-vous une autre solution?

PS: Je ne veux modifier la struture de cette table, car l'idéal était que
DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.

Merci d'avance.;-)

--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org







--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
brouardf
Le #18389081
J'ajouterais qu'il faut aussi exécuter cette requête au niveau
d'isolation SERIALIZABLE, sinon si deux utilisateurs la font en
parallèle, cela risque de générer le même n°. Le temps de calcule r le
max, avant de l'insérer il se peut qu'une autre personne calcule ce
même max. D'autant plus si vous êtes en version Enterprise à cause du
SCAN "réutilisable".

Le mieux serait d'externaliser le calcul de cet incrément comme je
l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
clefs/
En effet au fur et à mesure du grossissement de votre table, le calcul
du MAX va prendre de plus en plus de temps, car pour faire ceci le
moteur SQL est obligé de verrouiller toutes les lignes de la table ...

A +

A +
__________________
Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 13 jan, 21:32, EmanuelL
Merci Patrice,

Tu as saisie mon problème, je ne connaissais pas ROW_NUMBER, je le
tersterai demain au bureau.

A+

Patrice a pensé très fort :



> Je crois comprendre que le problème est que le MAX va être calcul é une fois
> et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les l ignes
> sélectionnées dans ForfAdminIntern.

> Si c'est bien cela il faudrait donc éventuellement numéroter égal ement les
> lignes sélectionnées pour y ajouter la valeur de base et avoir un
> DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
> (http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'assur er que
> les n° sont uniques...

> Effectivement dommage ne de pas utiliser un n° autoincrémenté.

> --
> Patrice

> "EmanuelL" > de discussion :
>> Bonjour à Tous,

>> Encore moi, je suis complètement coinçé.
>> J'aimerai créer une requête qui récupère le dernier no de
>> DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est NOT
>> NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement suiva nt...

>> Voici ma requête, et ça ne focntionne pas :

>> INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
>> ([DRITTRECH_NR]
>> ,[FAK_NR]
>> ,[MWST_NR]
>> ,[PROJEKT_NR]
>> ,[ARTIKEL_NR]
>> ,[ABRDATUM]
>> ,[TEXT]
>> SELECT
>> (SELECT MAX([DRITTRECH_NR]) + 1 FROM
>> [FiducDB1].[dbo].[DRITTRECH_EL])
>> ,NULL
>> ,1
>> ,Client_No
>> ,NULL
>> ,GETDATE()
>> ,'Forfait administration'
>> FROM [FiducDB1].[dbo].[ForfAdminIntern]
>> WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
>> AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009

>> Est-il possible de le faire avec T-SQL ou avez-vous une autre solution ?

>> PS: Je ne veux modifier la struture de cette table, car l'idéal ét ait que
>> DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.

>> Merci d'avance.;-)

>> --

>> *!* -----------------------------------
>> EmanuelL
>> Membre d'AtoutFox
>>www.atoutfox.org

--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFoxwww.atoutfox.org


EmanuelL
Le #18394481
Merci des vos conseils.

Je regardes aussi du coté de "SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ"

Le mieux serait d'externaliser le calcul de cet incrément comme je
l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
clefs/



Pas trouvé l'article qui parle d'externalition de calculs, pouvez-vous
me donner le lien exact?

Malheureusement la valeur retounée par MAX reste la même, comme Patrice
l'avait indiqué, d'où l'incrémentation par MAX ne joue pas.

Je veux regarder aussi du coté de ROW_NUMBER():

SELECT TOP 1 [DRITTRECH_NR], ROW_NUMBER() OVER(ORDER BY [DRITTRECH_NR]
DESC) AS Row_Num FROM [FiducDB1].[dbo].[DRITTRECH_EL]

A+ ;-)


Je crois comprendre que le problème est que le MAX va être calculé une fois
et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
sélectionnées dans ForfAdminIntern.







Après mure réflexion, a écrit :
J'ajouterais qu'il faut aussi exécuter cette requête au niveau
d'isolation SERIALIZABLE, sinon si deux utilisateurs la font en
parallèle, cela risque de générer le même n°. Le temps de calculer le
max, avant de l'insérer il se peut qu'une autre personne calcule ce
même max. D'autant plus si vous êtes en version Enterprise à cause du
SCAN "réutilisable".

Le mieux serait d'externaliser le calcul de cet incrément comme je
l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
clefs/
En effet au fur et à mesure du grossissement de votre table, le calcul
du MAX va prendre de plus en plus de temps, car pour faire ceci le
moteur SQL est obligé de verrouiller toutes les lignes de la table ...

A +

A +
__________________
Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 13 jan, 21:32, EmanuelL
Merci Patrice,

Tu as saisie mon problème, je ne connaissais pas ROW_NUMBER, je le
tersterai demain au bureau.

A+

Patrice a pensé très fort :



Je crois comprendre que le problème est que le MAX va être calculé une fois
et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
sélectionnées dans ForfAdminIntern.



Si c'est bien cela il faudrait donc éventuellement numéroter également les
lignes sélectionnées pour y ajouter la valeur de base et avoir un
DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
(http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'assurer
que les n° sont uniques...



Effectivement dommage ne de pas utiliser un n° autoincrémenté.
--
Patrice



"EmanuelL" groupe de discussion :
Bonjour à Tous,





Encore moi, je suis complètement coinçé.
J'aimerai créer une requête qui récupère le dernier no de
DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est NOT
NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement suivant...
Voici ma requête, et ça ne focntionne pas :
INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
([DRITTRECH_NR]
,[FAK_NR]
,[MWST_NR]
,[PROJEKT_NR]
,[ARTIKEL_NR]
,[ABRDATUM]
,[TEXT]
SELECT
(SELECT MAX([DRITTRECH_NR]) + 1 FROM
[FiducDB1].[dbo].[DRITTRECH_EL])
,NULL
,1
,Client_No
,NULL
,GETDATE()
,'Forfait administration'
FROM [FiducDB1].[dbo].[ForfAdminIntern]
WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009
Est-il possible de le faire avec T-SQL ou avez-vous une autre solution?
PS: Je ne veux modifier la struture de cette table, car l'idéal était que
DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.
Merci d'avance.;-)





--





*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org





--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFoxwww.atoutfox.org





--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
brouardf
Le #18401811
> Je crois comprendre que le problème est que le MAX va être calculé une fois



OUI !

Pour l'article :
http://sqlpro.developpez.com/cours/clefs/

Pour la génération de multiples clefs par ce même procédé, lisez la
blog que j'ai fait à ce sujet :
http://blog.developpez.com/sqlpro?title=insertion_de_clefs_multilignes_a_ increma

Faites attention à l'url, Google la coupe en deux c'est pourquoi vous
n'avez pas pu cliqué dessus lors de votre lecture précédente !

A +

Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *


On 15 jan, 16:17, EmanuelL
Merci des vos conseils.

Je regardes aussi du coté de "SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ"

> Le mieux serait d'externaliser le calcul de cet incrément comme je
> l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
> clefs/

Pas trouvé l'article qui parle d'externalition de calculs, pouvez-vous
me donner le lien exact?

Malheureusement la valeur retounée par MAX reste la même, comme Patri ce
l'avait indiqué, d'où l'incrémentation par MAX ne joue pas.

Je veux regarder aussi du coté de ROW_NUMBER():

SELECT TOP 1 [DRITTRECH_NR], ROW_NUMBER() OVER(ORDER BY [DRITTRECH_NR]
DESC) AS Row_Num        FROM [FiducDB1].[dbo].[DRITTRECH_EL]

A+ ;-)

>>> Je crois comprendre que le problème est que le MAX va être calcul é une fois
>>> et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
>>> sélectionnées dans ForfAdminIntern.

Après mure réflexion, a écrit :



> J'ajouterais qu'il faut aussi exécuter cette requête au niveau
> d'isolation SERIALIZABLE, sinon si deux utilisateurs la font en
> parallèle, cela risque de générer le même n°. Le temps de cal culer le
> max, avant de l'insérer il se peut qu'une autre personne calcule ce
> même max. D'autant plus si vous êtes en version Enterprise à caus e du
> SCAN "réutilisable".

> Le mieux serait d'externaliser le calcul de cet incrément comme je
> l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
> clefs/
> En effet au fur et à mesure du grossissement de votre table, le calcu l
> du MAX va prendre de plus en plus de temps, car pour faire ceci le
> moteur SQL est obligé de verrouiller toutes les lignes de la table .. .

> A +

> A +
> __________________
> Frédéric BROUARD, Spécialiste modélisation, bases de données,
> optimisation, langage SQL.
> Le site sur le langage SQL et les S.G.B.D. relationnels :
>http://sqlpro.developpez.com/
> Expert SQL Serverhttp://www.sqlspot.com: audit, optimisation,
> tuning, formation
> * * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
> On 13 jan, 21:32, EmanuelL >> Merci Patrice,

>> Tu as saisie mon problème, je ne connaissais pas ROW_NUMBER, je le
>> tersterai demain au bureau.

>> A+

>> Patrice a pensé très fort :

>>> Je crois comprendre que le problème est que le MAX va être calcul é une fois
>>> et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les lignes
>>> sélectionnées dans ForfAdminIntern.

>>> Si c'est bien cela il faudrait donc éventuellement numéroter ég alement les
>>> lignes sélectionnées pour y ajouter la valeur de base et avoir un
>>> DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
>>> (http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'ass urer
>>> que les n° sont uniques...

>>> Effectivement dommage ne de pas utiliser un n° autoincrémenté.
>>> --
>>> Patrice

>>> "EmanuelL" >>> groupe de discussion : ...
>>>> Bonjour à Tous,

>>>> Encore moi, je suis complètement coinçé.
>>>> J'aimerai créer une requête qui récupère le dernier no de
>>>> DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il e st NOT
>>>> NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement sui vant...
>>>> Voici ma requête, et ça ne focntionne pas :
>>>> INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
>>>>           ([DRITTRECH_NR]
>>>>           ,[FAK_NR]
>>>>           ,[MWST_NR]
>>>>           ,[PROJEKT_NR]
>>>>           ,[ARTIKEL_NR]
>>>>           ,[ABRDATUM]
>>>>           ,[TEXT]
>>>>    SELECT
>>>>           (SELECT MAX([DRITTRECH_NR]) + 1 FROM
>>>> [FiducDB1].[dbo].[DRITTRECH_EL])
>>>>           ,NULL
>>>>           ,1
>>>>           ,Client_No
>>>>           ,NULL
>>>>           ,GETDATE()
>>>>           ,'Forfait administration'
>>>> FROM [FiducDB1].[dbo].[ForfAdminIntern]
>>>> WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
>>>> AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009
>>>> Est-il possible de le faire avec T-SQL ou avez-vous une autre soluti on?
>>>> PS: Je ne veux modifier la struture de cette table, car l'idéal était que
>>>> DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.
>>>> Merci d'avance.;-)

>>>> --

>>>> *!* -----------------------------------
>>>> EmanuelL
>>>> Membre d'AtoutFox
>>>>www.atoutfox.org

>> --

>> *!* -----------------------------------
>> EmanuelL
>> Membre d'AtoutFoxwww.atoutfox.org

--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFoxwww.atoutfox.org


EmanuelL
Le #18403071
Merci encore, j'ai trouvé l'article que je lus à ce moment...

A+ ;-)

Le 16.01.2009, a supposé :
Je crois comprendre que le problème est que le MAX va être calculé une fois



OUI !

Pour l'article :
http://sqlpro.developpez.com/cours/clefs/

Pour la génération de multiples clefs par ce même procédé, lisez la
blog que j'ai fait à ce sujet :
http://blog.developpez.com/sqlpro?title=insertion_de_clefs_multilignes_a_increma

Faites attention à l'url, Google la coupe en deux c'est pourquoi vous
n'avez pas pu cliqué dessus lors de votre lecture précédente !

A +

Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *


On 15 jan, 16:17, EmanuelL
Merci des vos conseils.

Je regardes aussi du coté de "SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ"

Le mieux serait d'externaliser le calcul de cet incrément comme je
l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
clefs/



Pas trouvé l'article qui parle d'externalition de calculs, pouvez-vous
me donner le lien exact?

Malheureusement la valeur retounée par MAX reste la même, comme Patrice
l'avait indiqué, d'où l'incrémentation par MAX ne joue pas.

Je veux regarder aussi du coté de ROW_NUMBER():

SELECT TOP 1 [DRITTRECH_NR], ROW_NUMBER() OVER(ORDER BY [DRITTRECH_NR]
DESC) AS Row_Num        FROM [FiducDB1].[dbo].[DRITTRECH_EL]

A+ ;-)

Je crois comprendre que le problème est que le MAX va être calculé une
fois et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les
lignes sélectionnées dans ForfAdminIntern.







Après mure réflexion, a écrit :



J'ajouterais qu'il faut aussi exécuter cette requête au niveau
d'isolation SERIALIZABLE, sinon si deux utilisateurs la font en
parallèle, cela risque de générer le même n°. Le temps de calculer le
max, avant de l'insérer il se peut qu'une autre personne calcule ce
même max. D'autant plus si vous êtes en version Enterprise à cause du
SCAN "réutilisable".



Le mieux serait d'externaliser le calcul de cet incrément comme je
l'ai indiqué dans cet article :http://sqlpro.developpez.com/cours/
clefs/
En effet au fur et à mesure du grossissement de votre table, le calcul
du MAX va prendre de plus en plus de temps, car pour faire ceci le
moteur SQL est obligé de verrouiller toutes les lignes de la table ...
A +



A +
__________________
Frédéric BROUARD, Spécialiste modélisation, bases de données,
optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels :
http://sqlpro.developpez.com/
Expert SQL Serverhttp://www.sqlspot.com: audit, optimisation,
tuning, formation
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *
On 13 jan, 21:32, EmanuelL
Merci Patrice,





Tu as saisie mon problème, je ne connaissais pas ROW_NUMBER, je le
tersterai demain au bureau.





A+





Patrice a pensé très fort :





Je crois comprendre que le problème est que le MAX va être calculé une
fois et donc DRITTRECH_NR aurait toujours la même valeur pour toutes les
lignes sélectionnées dans ForfAdminIntern.
Si c'est bien cela il faudrait donc éventuellement numéroter également
les lignes sélectionnées pour y ajouter la valeur de base et avoir un
DRITTRECH_NR différent à chaque fois. Cf peut-être ROW_NUMBER
(http://msdn.microsoft.com/fr-fr/library/ms186734.aspx) et bien s'assurer
que les n° sont uniques...







Effectivement dommage ne de pas utiliser un n° autoincrémenté.
--
Patrice







"EmanuelL" groupe de discussion :
Bonjour à Tous,









Encore moi, je suis complètement coinçé.
J'aimerai créer une requête qui récupère le dernier no de
DRITTRECH_EL.DRITTRECH_NR, qui n'est pas auto-incrémentiel et il est NOT
NULL, et l'incrémenter de 1 avant d'insérer l'enregistrement suivant...
Voici ma requête, et ça ne focntionne pas :
INSERT INTO [FiducDB1].[dbo].[DRITTRECH_EL]
          ([DRITTRECH_NR]
          ,[FAK_NR]
          ,[MWST_NR]
          ,[PROJEKT_NR]
          ,[ARTIKEL_NR]
          ,[ABRDATUM]
          ,[TEXT]
   SELECT
          (SELECT MAX([DRITTRECH_NR]) + 1 FROM
[FiducDB1].[dbo].[DRITTRECH_EL])
          ,NULL
          ,1
          ,Client_No
          ,NULL
          ,GETDATE()
          ,'Forfait administration'
FROM [FiducDB1].[dbo].[ForfAdminIntern]
WHERE [dbo].[ForfAdminIntern].[Transfert_Debours] = 0
AND [dbo].[ForfAdminIntern].[AnneeForfait] = 2009
Est-il possible de le faire avec T-SQL ou avez-vous une autre solution?
PS: Je ne veux modifier la struture de cette table, car l'idéal était
que DRITTRECH_NR soit IDENTITY(1,1) NOT NULL.
Merci d'avance.;-)









--









*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org









--





*!* -----------------------------------
EmanuelL
Membre d'AtoutFoxwww.atoutfox.org





--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFoxwww.atoutfox.org





--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Publicité
Poster une réponse
Anonyme