Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock. Chaque
enregistrement est défini par une clé numéro de colis / code fournisseur
unique.
Mon problème est que je stocke dans une autre table le dernier numéro de
colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir un
numéro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le dernier
numéro dans une table , qui insère ce numéro et les autres infos dans une
table stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
puis je être sur que je n'aurais pas de doublon. (il faut bloquer la table
ou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour l'impression
Exemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
avoir de souci de doublons entre deux user.
Merci d'avance
Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock. Chaque
enregistrement est défini par une clé numéro de colis / code fournisseur
unique.
Mon problème est que je stocke dans une autre table le dernier numéro de
colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir un
numéro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le dernier
numéro dans une table , qui insère ce numéro et les autres infos dans une
table stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
puis je être sur que je n'aurais pas de doublon. (il faut bloquer la table
ou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour l'impression
Exemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
avoir de souci de doublons entre deux user.
Merci d'avance
Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock. Chaque
enregistrement est défini par une clé numéro de colis / code fournisseur
unique.
Mon problème est que je stocke dans une autre table le dernier numéro de
colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir un
numéro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le dernier
numéro dans une table , qui insère ce numéro et les autres infos dans une
table stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
puis je être sur que je n'aurais pas de doublon. (il faut bloquer la table
ou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour l'impression
Exemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
avoir de souci de doublons entre deux user.
Merci d'avance
Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:
> Bonjour à tous.
>
>
> Je dois créer une appli avec une base SQL.
>
> Dans cette appli je dois insérer des données dans une table Stock.
> enregistrement est défini par une clé numéro de colis / code fournisseur
> unique.
>
> Mon problème est que je stocke dans une autre table le dernier numéro de
> colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
> numéro d'un fournisseur très grand qui me fausserai tout.
>
> Donc je cherche à faire une Procédure stockée qui me récupère le dernier
> numéro dans une table , qui insère ce numéro et les autres infos dans
> table stock et qui incrémente mon numéro pour le colis suivant.
>
> Mon souci est que mon appli sera multi user, multi poste etc... Donc
comment
> puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> ou dans la proc mettre un blocage) mais je sais pas comment faire.
>
> De plus je dois renvoyer en parametre mon dernier numéro pour
>
> Exemple:
>
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> declare @LastNumero int
>
> Select @lastnumero = lastnumero from DernierNum
>
> Insert into stock (colis, fournisseur, produit )
> values(@lastnumero, @fournisseur, @produit)
>
> update DernierNumero
> set lastnumero = @lastnumero + 1 From DernierNum
>
> select @colis = @lastNumero
>
>
> Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
pas
> avoir de souci de doublons entre deux user.
>
> Merci d'avance
>
>
>
Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
> Bonjour à tous.
>
>
> Je dois créer une appli avec une base SQL.
>
> Dans cette appli je dois insérer des données dans une table Stock.
> enregistrement est défini par une clé numéro de colis / code fournisseur
> unique.
>
> Mon problème est que je stocke dans une autre table le dernier numéro de
> colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
> numéro d'un fournisseur très grand qui me fausserai tout.
>
> Donc je cherche à faire une Procédure stockée qui me récupère le dernier
> numéro dans une table , qui insère ce numéro et les autres infos dans
> table stock et qui incrémente mon numéro pour le colis suivant.
>
> Mon souci est que mon appli sera multi user, multi poste etc... Donc
comment
> puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> ou dans la proc mettre un blocage) mais je sais pas comment faire.
>
> De plus je dois renvoyer en parametre mon dernier numéro pour
>
> Exemple:
>
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> declare @LastNumero int
>
> Select @lastnumero = lastnumero from DernierNum
>
> Insert into stock (colis, fournisseur, produit )
> values(@lastnumero, @fournisseur, @produit)
>
> update DernierNumero
> set lastnumero = @lastnumero + 1 From DernierNum
>
> select @colis = @lastNumero
>
>
> Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
pas
> avoir de souci de doublons entre deux user.
>
> Merci d'avance
>
>
>
Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:
> Bonjour à tous.
>
>
> Je dois créer une appli avec une base SQL.
>
> Dans cette appli je dois insérer des données dans une table Stock.
> enregistrement est défini par une clé numéro de colis / code fournisseur
> unique.
>
> Mon problème est que je stocke dans une autre table le dernier numéro de
> colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
> numéro d'un fournisseur très grand qui me fausserai tout.
>
> Donc je cherche à faire une Procédure stockée qui me récupère le dernier
> numéro dans une table , qui insère ce numéro et les autres infos dans
> table stock et qui incrémente mon numéro pour le colis suivant.
>
> Mon souci est que mon appli sera multi user, multi poste etc... Donc
comment
> puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> ou dans la proc mettre un blocage) mais je sais pas comment faire.
>
> De plus je dois renvoyer en parametre mon dernier numéro pour
>
> Exemple:
>
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> declare @LastNumero int
>
> Select @lastnumero = lastnumero from DernierNum
>
> Insert into stock (colis, fournisseur, produit )
> values(@lastnumero, @fournisseur, @produit)
>
> update DernierNumero
> set lastnumero = @lastnumero + 1 From DernierNum
>
> select @colis = @lastNumero
>
>
> Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne puisse
pas
> avoir de souci de doublons entre deux user.
>
> Merci d'avance
>
>
>
Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
de news: d7hrml$kmm$
> Il te suffit de declarer dans ta table stock le champ colis en Identity
> (également appelé numéro auto)
>
> pour récupérer sa valeur apres un insert faire SELECT @@identity
>
>
>
> create procedure test
> @produit char(10),
> @fournisseur char(10)
>
> AS
> Insert into stock (fournisseur, produit )
> values(@fournisseur, @produit)
>
> Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>
>
>
> Laurent.
>
>
>
>
>
> "jeorme" wrote in message
> news:
> > Bonjour à tous.
> >
> >
> > Je dois créer une appli avec une base SQL.
> >
> > Dans cette appli je dois insérer des données dans une table Stock.
Chaque
> > enregistrement est défini par une clé numéro de colis / code
> > unique.
> >
> > Mon problème est que je stocke dans une autre table le dernier numéro
> > colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
un
> > numéro d'un fournisseur très grand qui me fausserai tout.
> >
> > Donc je cherche à faire une Procédure stockée qui me récupère le
> > numéro dans une table , qui insère ce numéro et les autres infos dans
une
> > table stock et qui incrémente mon numéro pour le colis suivant.
> >
> > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> comment
> > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
table
> > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> >
> > De plus je dois renvoyer en parametre mon dernier numéro pour
l'impression
> >
> > Exemple:
> >
> > create procedure test
> >
> > @produit char(10),
> > @fournisseur char(10),
> > @colis int OUTPUT
> >
> > AS
> >
> > declare @LastNumero int
> >
> > Select @lastnumero = lastnumero from DernierNum
> >
> > Insert into stock (colis, fournisseur, produit )
> > values(@lastnumero, @fournisseur, @produit)
> >
> > update DernierNumero
> > set lastnumero = @lastnumero + 1 From DernierNum
> >
> > select @colis = @lastNumero
> >
> >
> > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
> pas
> > avoir de souci de doublons entre deux user.
> >
> > Merci d'avance
> >
> >
> >
>
>
Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
de news: d7hrml$kmm$1@s1.news.oleane.net...
> Il te suffit de declarer dans ta table stock le champ colis en Identity
> (également appelé numéro auto)
>
> pour récupérer sa valeur apres un insert faire SELECT @@identity
>
>
>
> create procedure test
> @produit char(10),
> @fournisseur char(10)
>
> AS
> Insert into stock (fournisseur, produit )
> values(@fournisseur, @produit)
>
> Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>
>
>
> Laurent.
>
>
>
>
>
> "jeorme" <jerome.boutin@filtrauto.com> wrote in message
> news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
> > Bonjour à tous.
> >
> >
> > Je dois créer une appli avec une base SQL.
> >
> > Dans cette appli je dois insérer des données dans une table Stock.
Chaque
> > enregistrement est défini par une clé numéro de colis / code
> > unique.
> >
> > Mon problème est que je stocke dans une autre table le dernier numéro
> > colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
un
> > numéro d'un fournisseur très grand qui me fausserai tout.
> >
> > Donc je cherche à faire une Procédure stockée qui me récupère le
> > numéro dans une table , qui insère ce numéro et les autres infos dans
une
> > table stock et qui incrémente mon numéro pour le colis suivant.
> >
> > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> comment
> > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
table
> > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> >
> > De plus je dois renvoyer en parametre mon dernier numéro pour
l'impression
> >
> > Exemple:
> >
> > create procedure test
> >
> > @produit char(10),
> > @fournisseur char(10),
> > @colis int OUTPUT
> >
> > AS
> >
> > declare @LastNumero int
> >
> > Select @lastnumero = lastnumero from DernierNum
> >
> > Insert into stock (colis, fournisseur, produit )
> > values(@lastnumero, @fournisseur, @produit)
> >
> > update DernierNumero
> > set lastnumero = @lastnumero + 1 From DernierNum
> >
> > select @colis = @lastNumero
> >
> >
> > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
> pas
> > avoir de souci de doublons entre deux user.
> >
> > Merci d'avance
> >
> >
> >
>
>
Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
de news: d7hrml$kmm$
> Il te suffit de declarer dans ta table stock le champ colis en Identity
> (également appelé numéro auto)
>
> pour récupérer sa valeur apres un insert faire SELECT @@identity
>
>
>
> create procedure test
> @produit char(10),
> @fournisseur char(10)
>
> AS
> Insert into stock (fournisseur, produit )
> values(@fournisseur, @produit)
>
> Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>
>
>
> Laurent.
>
>
>
>
>
> "jeorme" wrote in message
> news:
> > Bonjour à tous.
> >
> >
> > Je dois créer une appli avec une base SQL.
> >
> > Dans cette appli je dois insérer des données dans une table Stock.
Chaque
> > enregistrement est défini par une clé numéro de colis / code
> > unique.
> >
> > Mon problème est que je stocke dans une autre table le dernier numéro
> > colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
un
> > numéro d'un fournisseur très grand qui me fausserai tout.
> >
> > Donc je cherche à faire une Procédure stockée qui me récupère le
> > numéro dans une table , qui insère ce numéro et les autres infos dans
une
> > table stock et qui incrémente mon numéro pour le colis suivant.
> >
> > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> comment
> > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
table
> > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> >
> > De plus je dois renvoyer en parametre mon dernier numéro pour
l'impression
> >
> > Exemple:
> >
> > create procedure test
> >
> > @produit char(10),
> > @fournisseur char(10),
> > @colis int OUTPUT
> >
> > AS
> >
> > declare @LastNumero int
> >
> > Select @lastnumero = lastnumero from DernierNum
> >
> > Insert into stock (colis, fournisseur, produit )
> > values(@lastnumero, @fournisseur, @produit)
> >
> > update DernierNumero
> > set lastnumero = @lastnumero + 1 From DernierNum
> >
> > select @colis = @lastNumero
> >
> >
> > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
> pas
> > avoir de souci de doublons entre deux user.
> >
> > Merci d'avance
> >
> >
> >
>
>
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" wrote in message
news:Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
messagede news: d7hrml$kmm$Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaqueenregistrement est défini par une clé numéro de colis / code
fournisseurunique.
Mon problème est que je stocke dans une autre table le dernier numéro
decolis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
unnuméro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
derniernuméro dans une table , qui insère ce numéro et les autres infos dans
unetable stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
commentpuis je être sur que je n'aurais pas de doublon. (il faut bloquer la
tableou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impressionExemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puissepasavoir de souci de doublons entre deux user.
Merci d'avance
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OjYwyDnZFHA.3048@TK2MSFTNGP14.phx.gbl...
Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
message
de news: d7hrml$kmm$1@s1.news.oleane.net...
Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaque
enregistrement est défini par une clé numéro de colis / code
fournisseur
unique.
Mon problème est que je stocke dans une autre table le dernier numéro
de
colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
un
numéro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
dernier
numéro dans une table , qui insère ce numéro et les autres infos dans
une
table stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
comment
puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
table
ou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impression
Exemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puisse
pas
avoir de souci de doublons entre deux user.
Merci d'avance
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" wrote in message
news:Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
messagede news: d7hrml$kmm$Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaqueenregistrement est défini par une clé numéro de colis / code
fournisseurunique.
Mon problème est que je stocke dans une autre table le dernier numéro
decolis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
unnuméro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
derniernuméro dans une table , qui insère ce numéro et les autres infos dans
unetable stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
commentpuis je être sur que je n'aurais pas de doublon. (il faut bloquer la
tableou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impressionExemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puissepasavoir de souci de doublons entre deux user.
Merci d'avance
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" wrote in message
news:
> Bonjour,
>
> mon problème est que je ne veux pas avoir un numéro auto car des fois
> j'aurais des numéros qui viennent de l'extérieur par EDI.
>
>
> "Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
message
> de news: d7hrml$kmm$
> > Il te suffit de declarer dans ta table stock le champ colis en
> > (également appelé numéro auto)
> >
> > pour récupérer sa valeur apres un insert faire SELECT @@identity
> >
> >
> >
> > create procedure test
> > @produit char(10),
> > @fournisseur char(10)
> >
> > AS
> > Insert into stock (fournisseur, produit )
> > values(@fournisseur, @produit)
> >
> > Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
> >
> >
> >
> > Laurent.
> >
> >
> >
> >
> >
> > "jeorme" wrote in message
> > news:
> > > Bonjour à tous.
> > >
> > >
> > > Je dois créer une appli avec une base SQL.
> > >
> > > Dans cette appli je dois insérer des données dans une table Stock.
> Chaque
> > > enregistrement est défini par une clé numéro de colis / code
fournisseur
> > > unique.
> > >
> > > Mon problème est que je stocke dans une autre table le dernier
de
> > > colis. Je ne peux pas faire un Max de mon numéro car je pourrait
> un
> > > numéro d'un fournisseur très grand qui me fausserai tout.
> > >
> > > Donc je cherche à faire une Procédure stockée qui me récupère le
dernier
> > > numéro dans une table , qui insère ce numéro et les autres infos
> une
> > > table stock et qui incrémente mon numéro pour le colis suivant.
> > >
> > > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> > comment
> > > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> table
> > > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> > >
> > > De plus je dois renvoyer en parametre mon dernier numéro pour
> l'impression
> > >
> > > Exemple:
> > >
> > > create procedure test
> > >
> > > @produit char(10),
> > > @fournisseur char(10),
> > > @colis int OUTPUT
> > >
> > > AS
> > >
> > > declare @LastNumero int
> > >
> > > Select @lastnumero = lastnumero from DernierNum
> > >
> > > Insert into stock (colis, fournisseur, produit )
> > > values(@lastnumero, @fournisseur, @produit)
> > >
> > > update DernierNumero
> > > set lastnumero = @lastnumero + 1 From DernierNum
> > >
> > > select @colis = @lastNumero
> > >
> > >
> > > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puisse
> > pas
> > > avoir de souci de doublons entre deux user.
> > >
> > > Merci d'avance
> > >
> > >
> > >
> >
> >
>
>
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OjYwyDnZFHA.3048@TK2MSFTNGP14.phx.gbl...
> Bonjour,
>
> mon problème est que je ne veux pas avoir un numéro auto car des fois
> j'aurais des numéros qui viennent de l'extérieur par EDI.
>
>
> "Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
message
> de news: d7hrml$kmm$1@s1.news.oleane.net...
> > Il te suffit de declarer dans ta table stock le champ colis en
> > (également appelé numéro auto)
> >
> > pour récupérer sa valeur apres un insert faire SELECT @@identity
> >
> >
> >
> > create procedure test
> > @produit char(10),
> > @fournisseur char(10)
> >
> > AS
> > Insert into stock (fournisseur, produit )
> > values(@fournisseur, @produit)
> >
> > Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
> >
> >
> >
> > Laurent.
> >
> >
> >
> >
> >
> > "jeorme" <jerome.boutin@filtrauto.com> wrote in message
> > news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
> > > Bonjour à tous.
> > >
> > >
> > > Je dois créer une appli avec une base SQL.
> > >
> > > Dans cette appli je dois insérer des données dans une table Stock.
> Chaque
> > > enregistrement est défini par une clé numéro de colis / code
fournisseur
> > > unique.
> > >
> > > Mon problème est que je stocke dans une autre table le dernier
de
> > > colis. Je ne peux pas faire un Max de mon numéro car je pourrait
> un
> > > numéro d'un fournisseur très grand qui me fausserai tout.
> > >
> > > Donc je cherche à faire une Procédure stockée qui me récupère le
dernier
> > > numéro dans une table , qui insère ce numéro et les autres infos
> une
> > > table stock et qui incrémente mon numéro pour le colis suivant.
> > >
> > > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> > comment
> > > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> table
> > > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> > >
> > > De plus je dois renvoyer en parametre mon dernier numéro pour
> l'impression
> > >
> > > Exemple:
> > >
> > > create procedure test
> > >
> > > @produit char(10),
> > > @fournisseur char(10),
> > > @colis int OUTPUT
> > >
> > > AS
> > >
> > > declare @LastNumero int
> > >
> > > Select @lastnumero = lastnumero from DernierNum
> > >
> > > Insert into stock (colis, fournisseur, produit )
> > > values(@lastnumero, @fournisseur, @produit)
> > >
> > > update DernierNumero
> > > set lastnumero = @lastnumero + 1 From DernierNum
> > >
> > > select @colis = @lastNumero
> > >
> > >
> > > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puisse
> > pas
> > > avoir de souci de doublons entre deux user.
> > >
> > > Merci d'avance
> > >
> > >
> > >
> >
> >
>
>
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
COMMIT TRANSACTION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Laurent.
"jeorme" wrote in message
news:
> Bonjour,
>
> mon problème est que je ne veux pas avoir un numéro auto car des fois
> j'aurais des numéros qui viennent de l'extérieur par EDI.
>
>
> "Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
message
> de news: d7hrml$kmm$
> > Il te suffit de declarer dans ta table stock le champ colis en
> > (également appelé numéro auto)
> >
> > pour récupérer sa valeur apres un insert faire SELECT @@identity
> >
> >
> >
> > create procedure test
> > @produit char(10),
> > @fournisseur char(10)
> >
> > AS
> > Insert into stock (fournisseur, produit )
> > values(@fournisseur, @produit)
> >
> > Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
> >
> >
> >
> > Laurent.
> >
> >
> >
> >
> >
> > "jeorme" wrote in message
> > news:
> > > Bonjour à tous.
> > >
> > >
> > > Je dois créer une appli avec une base SQL.
> > >
> > > Dans cette appli je dois insérer des données dans une table Stock.
> Chaque
> > > enregistrement est défini par une clé numéro de colis / code
fournisseur
> > > unique.
> > >
> > > Mon problème est que je stocke dans une autre table le dernier
de
> > > colis. Je ne peux pas faire un Max de mon numéro car je pourrait
> un
> > > numéro d'un fournisseur très grand qui me fausserai tout.
> > >
> > > Donc je cherche à faire une Procédure stockée qui me récupère le
dernier
> > > numéro dans une table , qui insère ce numéro et les autres infos
> une
> > > table stock et qui incrémente mon numéro pour le colis suivant.
> > >
> > > Mon souci est que mon appli sera multi user, multi poste etc... Donc
> > comment
> > > puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
> table
> > > ou dans la proc mettre un blocage) mais je sais pas comment faire.
> > >
> > > De plus je dois renvoyer en parametre mon dernier numéro pour
> l'impression
> > >
> > > Exemple:
> > >
> > > create procedure test
> > >
> > > @produit char(10),
> > > @fournisseur char(10),
> > > @colis int OUTPUT
> > >
> > > AS
> > >
> > > declare @LastNumero int
> > >
> > > Select @lastnumero = lastnumero from DernierNum
> > >
> > > Insert into stock (colis, fournisseur, produit )
> > > values(@lastnumero, @fournisseur, @produit)
> > >
> > > update DernierNumero
> > > set lastnumero = @lastnumero + 1 From DernierNum
> > >
> > > select @colis = @lastNumero
> > >
> > >
> > > Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puisse
> > pas
> > > avoir de souci de doublons entre deux user.
> > >
> > > Merci d'avance
> > >
> > >
> > >
> >
> >
>
>
Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
table de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
la table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
> BEGIN TRANSACTION
> SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> INSERT INTO Stock (Colis, Fournisseur, Produit )
> VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> COMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACK
> SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>
A +
> Laurent.
>
>
>
>
> "jeorme" wrote in message
> news:
>
>>Bonjour,
>>
>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>
>>
>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>
> message
>
>>de news: d7hrml$kmm$
>>
>>>Il te suffit de declarer dans ta table stock le champ colis en Identity
>>>(également appelé numéro auto)
>>>
>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>
>>>
>>>
>>>create procedure test
>>>@produit char(10),
>>>@fournisseur char(10)
>>>
>>>AS
>>>Insert into stock (fournisseur, produit )
>>>values(@fournisseur, @produit)
>>>
>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>
>>>
>>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>
>>>"jeorme" wrote in message
>>>news:
>>>
>>>>Bonjour à tous.
>>>>
>>>>
>>>>Je dois créer une appli avec une base SQL.
>>>>
>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>
>>Chaque
>>
>>>>enregistrement est défini par une clé numéro de colis / code
>
> fournisseur
>
>>>>unique.
>>>>
>>>>Mon problème est que je stocke dans une autre table le dernier numéro
>
> de
>
>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
>>
>>un
>>
>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>
>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>
> dernier
>
>>>>numéro dans une table , qui insère ce numéro et les autres infos dans
>>
>>une
>>
>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>
>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>
>>>comment
>>>
>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>
>>table
>>
>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>
>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>
>>l'impression
>>
>>>>Exemple:
>>>>
>>>>create procedure test
>>>>
>>>>@produit char(10),
>>>>@fournisseur char(10),
>>>>@colis int OUTPUT
>>>>
>>>>AS
>>>>
>>>>declare @LastNumero int
>>>>
>>>>Select @lastnumero = lastnumero from DernierNum
>>>>
>>>>Insert into stock (colis, fournisseur, produit )
>>>>values(@lastnumero, @fournisseur, @produit)
>>>>
>>>>update DernierNumero
>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>
>>>>select @colis = @lastNumero
>>>>
>>>>
>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>
> puisse
>
>>>pas
>>>
>>>>avoir de souci de doublons entre deux user.
>>>>
>>>>Merci d'avance
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
table de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
la table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
> BEGIN TRANSACTION
> SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> INSERT INTO Stock (Colis, Fournisseur, Produit )
> VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> COMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACK
> SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>
A +
> Laurent.
>
>
>
>
> "jeorme" <jerome.boutin@filtrauto.com> wrote in message
> news:OjYwyDnZFHA.3048@TK2MSFTNGP14.phx.gbl...
>
>>Bonjour,
>>
>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>
>>
>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>
> message
>
>>de news: d7hrml$kmm$1@s1.news.oleane.net...
>>
>>>Il te suffit de declarer dans ta table stock le champ colis en Identity
>>>(également appelé numéro auto)
>>>
>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>
>>>
>>>
>>>create procedure test
>>>@produit char(10),
>>>@fournisseur char(10)
>>>
>>>AS
>>>Insert into stock (fournisseur, produit )
>>>values(@fournisseur, @produit)
>>>
>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>
>>>
>>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>
>>>"jeorme" <jerome.boutin@filtrauto.com> wrote in message
>>>news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
>>>
>>>>Bonjour à tous.
>>>>
>>>>
>>>>Je dois créer une appli avec une base SQL.
>>>>
>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>
>>Chaque
>>
>>>>enregistrement est défini par une clé numéro de colis / code
>
> fournisseur
>
>>>>unique.
>>>>
>>>>Mon problème est que je stocke dans une autre table le dernier numéro
>
> de
>
>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
>>
>>un
>>
>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>
>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>
> dernier
>
>>>>numéro dans une table , qui insère ce numéro et les autres infos dans
>>
>>une
>>
>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>
>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>
>>>comment
>>>
>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>
>>table
>>
>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>
>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>
>>l'impression
>>
>>>>Exemple:
>>>>
>>>>create procedure test
>>>>
>>>>@produit char(10),
>>>>@fournisseur char(10),
>>>>@colis int OUTPUT
>>>>
>>>>AS
>>>>
>>>>declare @LastNumero int
>>>>
>>>>Select @lastnumero = lastnumero from DernierNum
>>>>
>>>>Insert into stock (colis, fournisseur, produit )
>>>>values(@lastnumero, @fournisseur, @produit)
>>>>
>>>>update DernierNumero
>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>
>>>>select @colis = @lastNumero
>>>>
>>>>
>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>
> puisse
>
>>>pas
>>>
>>>>avoir de souci de doublons entre deux user.
>>>>
>>>>Merci d'avance
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
table de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
la table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:
> create procedure test
>
> @produit char(10),
> @fournisseur char(10),
> @colis int OUTPUT
>
> AS
>
> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
> BEGIN TRANSACTION
> SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> INSERT INTO Stock (Colis, Fournisseur, Produit )
> VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
> COMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACK
> SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>
A +
> Laurent.
>
>
>
>
> "jeorme" wrote in message
> news:
>
>>Bonjour,
>>
>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>
>>
>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>
> message
>
>>de news: d7hrml$kmm$
>>
>>>Il te suffit de declarer dans ta table stock le champ colis en Identity
>>>(également appelé numéro auto)
>>>
>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>
>>>
>>>
>>>create procedure test
>>>@produit char(10),
>>>@fournisseur char(10)
>>>
>>>AS
>>>Insert into stock (fournisseur, produit )
>>>values(@fournisseur, @produit)
>>>
>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>
>>>
>>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>
>>>"jeorme" wrote in message
>>>news:
>>>
>>>>Bonjour à tous.
>>>>
>>>>
>>>>Je dois créer une appli avec une base SQL.
>>>>
>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>
>>Chaque
>>
>>>>enregistrement est défini par une clé numéro de colis / code
>
> fournisseur
>
>>>>unique.
>>>>
>>>>Mon problème est que je stocke dans une autre table le dernier numéro
>
> de
>
>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
>>
>>un
>>
>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>
>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>
> dernier
>
>>>>numéro dans une table , qui insère ce numéro et les autres infos dans
>>
>>une
>>
>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>
>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>
>>>comment
>>>
>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>
>>table
>>
>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>
>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>
>>l'impression
>>
>>>>Exemple:
>>>>
>>>>create procedure test
>>>>
>>>>@produit char(10),
>>>>@fournisseur char(10),
>>>>@colis int OUTPUT
>>>>
>>>>AS
>>>>
>>>>declare @LastNumero int
>>>>
>>>>Select @lastnumero = lastnumero from DernierNum
>>>>
>>>>Insert into stock (colis, fournisseur, produit )
>>>>values(@lastnumero, @fournisseur, @produit)
>>>>
>>>>update DernierNumero
>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>
>>>>select @colis = @lastNumero
>>>>
>>>>
>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>
> puisse
>
>>>pas
>>>
>>>>avoir de souci de doublons entre deux user.
>>>>
>>>>Merci d'avance
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
merci FRED pour ta réponse.
Simple question :
Les clefs valués c'est quoi ?
"Fred BROUARD" a écrit dans le message de news:Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
blocage,etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
unetable de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
clef dela table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREURINSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREURCOMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACKSET TRANSACTION ISOLATION LEVEL READ COMMITTED
A +Laurent.
"jeorme" wrote in message
news:Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
messagede news: d7hrml$kmm$Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaqueenregistrement est défini par une clé numéro de colis / code
fournisseurunique.
Mon problème est que je stocke dans une autre table le dernier numéro
decolis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
unnuméro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
derniernuméro dans une table , qui insère ce numéro et les autres infos dans
unetable stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
commentpuis je être sur que je n'aurais pas de doublon. (il faut bloquer la
tableou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impressionExemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puissepasavoir de souci de doublons entre deux user.
Merci d'avance
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
merci FRED pour ta réponse.
Simple question :
Les clefs valués c'est quoi ?
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de news:
429D84CC.9080506@club-internet.fr...
Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
blocage,
etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
une
table de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
clef de
la table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
INSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
COMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACK
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
A +
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OjYwyDnZFHA.3048@TK2MSFTNGP14.phx.gbl...
Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
message
de news: d7hrml$kmm$1@s1.news.oleane.net...
Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" <jerome.boutin@filtrauto.com> wrote in message
news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaque
enregistrement est défini par une clé numéro de colis / code
fournisseur
unique.
Mon problème est que je stocke dans une autre table le dernier numéro
de
colis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
un
numéro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
dernier
numéro dans une table , qui insère ce numéro et les autres infos dans
une
table stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
comment
puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
table
ou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impression
Exemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puisse
pas
avoir de souci de doublons entre deux user.
Merci d'avance
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
merci FRED pour ta réponse.
Simple question :
Les clefs valués c'est quoi ?
"Fred BROUARD" a écrit dans le message de news:Cette manière de faire n'est pas bonne du tout
1) aucune gestion d'erreur si le SELECT ne se fait pas
2) blocage de toute la table => performances lamentable possibilité de
blocage,etc...
Le seul moyen de réaliser ce genre de choses proprement est de rajouter
unetable de clefs comme indiqué dans l'article que j'ai rédigé :
http://sqlpro.developpez.com/cours/clefs/#L3.2
En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
clef dela table des clefs AVANT l'insertion définitive.
Voir avec => les corrections de ton code
Laurent MOREAU a écrit:create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @colis = MAX(Colis)+1 FROM Stock
=> IF @@ERROR <> 0 GOTO TRAITE_ERREURINSERT INTO Stock (Colis, Fournisseur, Produit )
VALUES(@colis , @fournisseur, @produit)
=> IF @@ERROR <> 0 GOTO TRAITE_ERREURCOMMIT TRANSACTION
=> RETURN TRAITE_ERREUR:
=> ROLLBACKSET TRANSACTION ISOLATION LEVEL READ COMMITTED
A +Laurent.
"jeorme" wrote in message
news:Bonjour,
mon problème est que je ne veux pas avoir un numéro auto car des fois
j'aurais des numéros qui viennent de l'extérieur par EDI.
"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
messagede news: d7hrml$kmm$Il te suffit de declarer dans ta table stock le champ colis en Identity
(également appelé numéro auto)
pour récupérer sa valeur apres un insert faire SELECT @@identity
create procedure test
@produit char(10),
@fournisseur char(10)
AS
Insert into stock (fournisseur, produit )
values(@fournisseur, @produit)
Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
Laurent.
"jeorme" wrote in message
news:Bonjour à tous.
Je dois créer une appli avec une base SQL.
Dans cette appli je dois insérer des données dans une table Stock.
Chaqueenregistrement est défini par une clé numéro de colis / code
fournisseurunique.
Mon problème est que je stocke dans une autre table le dernier numéro
decolis. Je ne peux pas faire un Max de mon numéro car je pourrait avoir
unnuméro d'un fournisseur très grand qui me fausserai tout.
Donc je cherche à faire une Procédure stockée qui me récupère le
derniernuméro dans une table , qui insère ce numéro et les autres infos dans
unetable stock et qui incrémente mon numéro pour le colis suivant.
Mon souci est que mon appli sera multi user, multi poste etc... Donc
commentpuis je être sur que je n'aurais pas de doublon. (il faut bloquer la
tableou dans la proc mettre un blocage) mais je sais pas comment faire.
De plus je dois renvoyer en parametre mon dernier numéro pour
l'impressionExemple:
create procedure test
@produit char(10),
@fournisseur char(10),
@colis int OUTPUT
AS
declare @LastNumero int
Select @lastnumero = lastnumero from DernierNum
Insert into stock (colis, fournisseur, produit )
values(@lastnumero, @fournisseur, @produit)
update DernierNumero
set lastnumero = @lastnumero + 1 From DernierNum
select @colis = @lastNumero
Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
puissepasavoir de souci de doublons entre deux user.
Merci d'avance
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
jeorme a écrit:
> merci FRED pour ta réponse.
> Simple question :
>
> Les clefs valués c'est quoi ?
Une clef qui possède une valeur.
Tu dis que soit tu veut générer une nouvelle valeur (clef non valuée) soit
importer un tuple contenant déjà une clef (clef valuée).
A +
>
> "Fred BROUARD" a écrit dans le message de
>
>
>>Cette manière de faire n'est pas bonne du tout
>>
>>1) aucune gestion d'erreur si le SELECT ne se fait pas
>>2) blocage de toute la table => performances lamentable possibilité de
>
> blocage,
>
>>etc...
>>Le seul moyen de réaliser ce genre de choses proprement est de rajouter
>
> une
>
>>table de clefs comme indiqué dans l'article que j'ai rédigé :
>>http://sqlpro.developpez.com/cours/clefs/#L3.2
>>
>>En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
>
> clef de
>
>>la table des clefs AVANT l'insertion définitive.
>>
>>Voir avec => les corrections de ton code
>>
>>Laurent MOREAU a écrit:
>>
>>>create procedure test
>>>
>>>@produit char(10),
>>>@fournisseur char(10),
>>>@colis int OUTPUT
>>>
>>>AS
>>>
>>>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
>>>BEGIN TRANSACTION
>>>SELECT @colis = MAX(Colis)+1 FROM Stock
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>INSERT INTO Stock (Colis, Fournisseur, Produit )
>>>VALUES(@colis , @fournisseur, @produit)
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>COMMIT TRANSACTION
>>
>>=> RETURN TRAITE_ERREUR:
>>=> ROLLBACK
>>
>>>SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>>>
>>
>>
>>A +
>>
>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>"jeorme" wrote in message
>>>news:
>>>
>>>
>>>>Bonjour,
>>>>
>>>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>>>
>>>>
>>>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>>>
>>>message
>>>
>>>
>>>>de news: d7hrml$kmm$
>>>>
>>>>
>>>>>Il te suffit de declarer dans ta table stock le champ colis en
>>>>>(également appelé numéro auto)
>>>>>
>>>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>>>
>>>>>
>>>>>
>>>>>create procedure test
>>>>>@produit char(10),
>>>>>@fournisseur char(10)
>>>>>
>>>>>AS
>>>>>Insert into stock (fournisseur, produit )
>>>>>values(@fournisseur, @produit)
>>>>>
>>>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>>>
>>>>>
>>>>>
>>>>>Laurent.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>"jeorme" wrote in message
>>>>>news:
>>>>>
>>>>>
>>>>>>Bonjour à tous.
>>>>>>
>>>>>>
>>>>>>Je dois créer une appli avec une base SQL.
>>>>>>
>>>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>>>
>>>>Chaque
>>>>
>>>>
>>>>>>enregistrement est défini par une clé numéro de colis / code
>>>
>>>fournisseur
>>>
>>>
>>>>>>unique.
>>>>>>
>>>>>>Mon problème est que je stocke dans une autre table le dernier
>>>
>>>de
>>>
>>>
>>>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait
>>>>
>>>>un
>>>>
>>>>
>>>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>>>
>>>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>>>
>>>dernier
>>>
>>>
>>>>>>numéro dans une table , qui insère ce numéro et les autres infos
>>>>
>>>>une
>>>>
>>>>
>>>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>>>
>>>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>>>
>>>>>comment
>>>>>
>>>>>
>>>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>>>
>>>>table
>>>>
>>>>
>>>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>>>
>>>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>>>
>>>>l'impression
>>>>
>>>>
>>>>>>Exemple:
>>>>>>
>>>>>>create procedure test
>>>>>>
>>>>>>@produit char(10),
>>>>>>@fournisseur char(10),
>>>>>>@colis int OUTPUT
>>>>>>
>>>>>>AS
>>>>>>
>>>>>>declare @LastNumero int
>>>>>>
>>>>>>Select @lastnumero = lastnumero from DernierNum
>>>>>>
>>>>>>Insert into stock (colis, fournisseur, produit )
>>>>>>values(@lastnumero, @fournisseur, @produit)
>>>>>>
>>>>>>update DernierNumero
>>>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>>>
>>>>>>select @colis = @lastNumero
>>>>>>
>>>>>>
>>>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>>>
>>>puisse
>>>
>>>
>>>>>pas
>>>>>
>>>>>
>>>>>>avoir de souci de doublons entre deux user.
>>>>>>
>>>>>>Merci d'avance
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>
>>--
>>Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
>>************************ www.datasapiens.com *************************
>>
>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
jeorme a écrit:
> merci FRED pour ta réponse.
> Simple question :
>
> Les clefs valués c'est quoi ?
Une clef qui possède une valeur.
Tu dis que soit tu veut générer une nouvelle valeur (clef non valuée) soit
importer un tuple contenant déjà une clef (clef valuée).
A +
>
> "Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de
> 429D84CC.9080506@club-internet.fr...
>
>>Cette manière de faire n'est pas bonne du tout
>>
>>1) aucune gestion d'erreur si le SELECT ne se fait pas
>>2) blocage de toute la table => performances lamentable possibilité de
>
> blocage,
>
>>etc...
>>Le seul moyen de réaliser ce genre de choses proprement est de rajouter
>
> une
>
>>table de clefs comme indiqué dans l'article que j'ai rédigé :
>>http://sqlpro.developpez.com/cours/clefs/#L3.2
>>
>>En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
>
> clef de
>
>>la table des clefs AVANT l'insertion définitive.
>>
>>Voir avec => les corrections de ton code
>>
>>Laurent MOREAU a écrit:
>>
>>>create procedure test
>>>
>>>@produit char(10),
>>>@fournisseur char(10),
>>>@colis int OUTPUT
>>>
>>>AS
>>>
>>>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
>>>BEGIN TRANSACTION
>>>SELECT @colis = MAX(Colis)+1 FROM Stock
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>INSERT INTO Stock (Colis, Fournisseur, Produit )
>>>VALUES(@colis , @fournisseur, @produit)
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>COMMIT TRANSACTION
>>
>>=> RETURN TRAITE_ERREUR:
>>=> ROLLBACK
>>
>>>SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>>>
>>
>>
>>A +
>>
>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>"jeorme" <jerome.boutin@filtrauto.com> wrote in message
>>>news:OjYwyDnZFHA.3048@TK2MSFTNGP14.phx.gbl...
>>>
>>>
>>>>Bonjour,
>>>>
>>>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>>>
>>>>
>>>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>>>
>>>message
>>>
>>>
>>>>de news: d7hrml$kmm$1@s1.news.oleane.net...
>>>>
>>>>
>>>>>Il te suffit de declarer dans ta table stock le champ colis en
>>>>>(également appelé numéro auto)
>>>>>
>>>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>>>
>>>>>
>>>>>
>>>>>create procedure test
>>>>>@produit char(10),
>>>>>@fournisseur char(10)
>>>>>
>>>>>AS
>>>>>Insert into stock (fournisseur, produit )
>>>>>values(@fournisseur, @produit)
>>>>>
>>>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>>>
>>>>>
>>>>>
>>>>>Laurent.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>"jeorme" <jerome.boutin@filtrauto.com> wrote in message
>>>>>news:OytQQfcZFHA.3876@TK2MSFTNGP12.phx.gbl...
>>>>>
>>>>>
>>>>>>Bonjour à tous.
>>>>>>
>>>>>>
>>>>>>Je dois créer une appli avec une base SQL.
>>>>>>
>>>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>>>
>>>>Chaque
>>>>
>>>>
>>>>>>enregistrement est défini par une clé numéro de colis / code
>>>
>>>fournisseur
>>>
>>>
>>>>>>unique.
>>>>>>
>>>>>>Mon problème est que je stocke dans une autre table le dernier
>>>
>>>de
>>>
>>>
>>>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait
>>>>
>>>>un
>>>>
>>>>
>>>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>>>
>>>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>>>
>>>dernier
>>>
>>>
>>>>>>numéro dans une table , qui insère ce numéro et les autres infos
>>>>
>>>>une
>>>>
>>>>
>>>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>>>
>>>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>>>
>>>>>comment
>>>>>
>>>>>
>>>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>>>
>>>>table
>>>>
>>>>
>>>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>>>
>>>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>>>
>>>>l'impression
>>>>
>>>>
>>>>>>Exemple:
>>>>>>
>>>>>>create procedure test
>>>>>>
>>>>>>@produit char(10),
>>>>>>@fournisseur char(10),
>>>>>>@colis int OUTPUT
>>>>>>
>>>>>>AS
>>>>>>
>>>>>>declare @LastNumero int
>>>>>>
>>>>>>Select @lastnumero = lastnumero from DernierNum
>>>>>>
>>>>>>Insert into stock (colis, fournisseur, produit )
>>>>>>values(@lastnumero, @fournisseur, @produit)
>>>>>>
>>>>>>update DernierNumero
>>>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>>>
>>>>>>select @colis = @lastNumero
>>>>>>
>>>>>>
>>>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>>>
>>>puisse
>>>
>>>
>>>>>pas
>>>>>
>>>>>
>>>>>>avoir de souci de doublons entre deux user.
>>>>>>
>>>>>>Merci d'avance
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>
>>--
>>Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
>>************************ www.datasapiens.com *************************
>>
>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
jeorme a écrit:
> merci FRED pour ta réponse.
> Simple question :
>
> Les clefs valués c'est quoi ?
Une clef qui possède une valeur.
Tu dis que soit tu veut générer une nouvelle valeur (clef non valuée) soit
importer un tuple contenant déjà une clef (clef valuée).
A +
>
> "Fred BROUARD" a écrit dans le message de
>
>
>>Cette manière de faire n'est pas bonne du tout
>>
>>1) aucune gestion d'erreur si le SELECT ne se fait pas
>>2) blocage de toute la table => performances lamentable possibilité de
>
> blocage,
>
>>etc...
>>Le seul moyen de réaliser ce genre de choses proprement est de rajouter
>
> une
>
>>table de clefs comme indiqué dans l'article que j'ai rédigé :
>>http://sqlpro.developpez.com/cours/clefs/#L3.2
>>
>>En ce qui concerne les ajouts avec clef valuée, il suffit de revaluer la
>
> clef de
>
>>la table des clefs AVANT l'insertion définitive.
>>
>>Voir avec => les corrections de ton code
>>
>>Laurent MOREAU a écrit:
>>
>>>create procedure test
>>>
>>>@produit char(10),
>>>@fournisseur char(10),
>>>@colis int OUTPUT
>>>
>>>AS
>>>
>>>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
>>>BEGIN TRANSACTION
>>>SELECT @colis = MAX(Colis)+1 FROM Stock
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>INSERT INTO Stock (Colis, Fournisseur, Produit )
>>>VALUES(@colis , @fournisseur, @produit)
>>
>>=> IF @@ERROR <> 0 GOTO TRAITE_ERREUR
>>
>>>COMMIT TRANSACTION
>>
>>=> RETURN TRAITE_ERREUR:
>>=> ROLLBACK
>>
>>>SET TRANSACTION ISOLATION LEVEL READ COMMITTED
>>>
>>
>>
>>A +
>>
>>
>>>Laurent.
>>>
>>>
>>>
>>>
>>>"jeorme" wrote in message
>>>news:
>>>
>>>
>>>>Bonjour,
>>>>
>>>>mon problème est que je ne veux pas avoir un numéro auto car des fois
>>>>j'aurais des numéros qui viennent de l'extérieur par EDI.
>>>>
>>>>
>>>>"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> a écrit dans le
>>>
>>>message
>>>
>>>
>>>>de news: d7hrml$kmm$
>>>>
>>>>
>>>>>Il te suffit de declarer dans ta table stock le champ colis en
>>>>>(également appelé numéro auto)
>>>>>
>>>>>pour récupérer sa valeur apres un insert faire SELECT @@identity
>>>>>
>>>>>
>>>>>
>>>>>create procedure test
>>>>>@produit char(10),
>>>>>@fournisseur char(10)
>>>>>
>>>>>AS
>>>>>Insert into stock (fournisseur, produit )
>>>>>values(@fournisseur, @produit)
>>>>>
>>>>>Select @@identity AS LeDernierNumeroDeColisQuiVientDetreInsere
>>>>>
>>>>>
>>>>>
>>>>>Laurent.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>"jeorme" wrote in message
>>>>>news:
>>>>>
>>>>>
>>>>>>Bonjour à tous.
>>>>>>
>>>>>>
>>>>>>Je dois créer une appli avec une base SQL.
>>>>>>
>>>>>>Dans cette appli je dois insérer des données dans une table Stock.
>>>>
>>>>Chaque
>>>>
>>>>
>>>>>>enregistrement est défini par une clé numéro de colis / code
>>>
>>>fournisseur
>>>
>>>
>>>>>>unique.
>>>>>>
>>>>>>Mon problème est que je stocke dans une autre table le dernier
>>>
>>>de
>>>
>>>
>>>>>>colis. Je ne peux pas faire un Max de mon numéro car je pourrait
>>>>
>>>>un
>>>>
>>>>
>>>>>>numéro d'un fournisseur très grand qui me fausserai tout.
>>>>>>
>>>>>>Donc je cherche à faire une Procédure stockée qui me récupère le
>>>
>>>dernier
>>>
>>>
>>>>>>numéro dans une table , qui insère ce numéro et les autres infos
>>>>
>>>>une
>>>>
>>>>
>>>>>>table stock et qui incrémente mon numéro pour le colis suivant.
>>>>>>
>>>>>>Mon souci est que mon appli sera multi user, multi poste etc... Donc
>>>>>
>>>>>comment
>>>>>
>>>>>
>>>>>>puis je être sur que je n'aurais pas de doublon. (il faut bloquer la
>>>>
>>>>table
>>>>
>>>>
>>>>>>ou dans la proc mettre un blocage) mais je sais pas comment faire.
>>>>>>
>>>>>>De plus je dois renvoyer en parametre mon dernier numéro pour
>>>>
>>>>l'impression
>>>>
>>>>
>>>>>>Exemple:
>>>>>>
>>>>>>create procedure test
>>>>>>
>>>>>>@produit char(10),
>>>>>>@fournisseur char(10),
>>>>>>@colis int OUTPUT
>>>>>>
>>>>>>AS
>>>>>>
>>>>>>declare @LastNumero int
>>>>>>
>>>>>>Select @lastnumero = lastnumero from DernierNum
>>>>>>
>>>>>>Insert into stock (colis, fournisseur, produit )
>>>>>>values(@lastnumero, @fournisseur, @produit)
>>>>>>
>>>>>>update DernierNumero
>>>>>>set lastnumero = @lastnumero + 1 From DernierNum
>>>>>>
>>>>>>select @colis = @lastNumero
>>>>>>
>>>>>>
>>>>>>Voila ma PS . Quelqu'un sait il comment faire en sorte que je ne
>>>
>>>puisse
>>>
>>>
>>>>>pas
>>>>>
>>>>>
>>>>>>avoir de souci de doublons entre deux user.
>>>>>>
>>>>>>Merci d'avance
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>
>>--
>>Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
>>************************ www.datasapiens.com *************************
>>
>
>
>
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
merci pour l'info
Je viens de lire ton article sur SQLPRO, il ya un truc que je pige pas, en
fait en quoi la PS m'assure que je ne peux pas avoir deux users simultanés.
merci pour l'info
Je viens de lire ton article sur SQLPRO, il ya un truc que je pige pas, en
fait en quoi la PS m'assure que je ne peux pas avoir deux users simultanés.
merci pour l'info
Je viens de lire ton article sur SQLPRO, il ya un truc que je pige pas, en
fait en quoi la PS m'assure que je ne peux pas avoir deux users simultanés.