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

Instruction SQL INSERT avec liste de paramétres dynamiques ??

6 réponses
Avatar
News Groups
Bonjour à tous,

Je travaille avec des formulaires indépendants sous VBA (Access)
qui modifient, ajoutent et suppriment des données sous SQL Server 2000.
Mes formulaires sont "indépendants", c'est à dire que je selectionnent mes
données
par le biais d'une intruction SELECT et je charge ces données dans mon
formulaire à l'ouverture.
Lors de la validation d'une modif une routine récupére toutes les valeurs
modifiées
et au lieu de créer dynamiquement une instruction SQL UPDATE au niveau
client,
je voudrais exécuter une procédure stockée de type UPDATE dont les valeurs
modifiées
sont passées par soit une valeur par paramétre ou soit sous forme de liste
concaténée et formatée avec séparateurs
Ensuite la procédure stocké executerai un UPDATE pour les colonnes
concernées avec les valeurs correspondantes.
Mais le nombre de valeurs peu variées et les colonnes concernée ne sont pas
toujours les mêmes évidemment.

Je ne sait comment ecrire ma procédure stockée ??
et mon problème est identique pour la validtion
d'une commande "Ajouter" avec une instruction INSERT ??

Si quelqu'un peut m'aider, il est le bienvenue,

Merci encore,
Thierry.


J'ai un problème récurrent qui est le suivant

6 réponses

Avatar
Med Bouchenafa
Il ne faut pas faire de différence entre colonnes modifiées et colonnes non modifiées
Il faut UPDATEr toutes les colonnes et cela ne changera rien pour SQL Server et le code serait
beaucoup plus facile à écrire

--
Bien cordialement
Med Bouchenafa

"News Groups" a écrit dans le message de news:
41b58b4e$0$6500$
Bonjour à tous,

Je travaille avec des formulaires indépendants sous VBA (Access)
qui modifient, ajoutent et suppriment des données sous SQL Server 2000.
Mes formulaires sont "indépendants", c'est à dire que je selectionnent mes
données
par le biais d'une intruction SELECT et je charge ces données dans mon
formulaire à l'ouverture.
Lors de la validation d'une modif une routine récupére toutes les valeurs
modifiées
et au lieu de créer dynamiquement une instruction SQL UPDATE au niveau
client,
je voudrais exécuter une procédure stockée de type UPDATE dont les valeurs
modifiées
sont passées par soit une valeur par paramétre ou soit sous forme de liste
concaténée et formatée avec séparateurs
Ensuite la procédure stocké executerai un UPDATE pour les colonnes
concernées avec les valeurs correspondantes.
Mais le nombre de valeurs peu variées et les colonnes concernée ne sont pas
toujours les mêmes évidemment.

Je ne sait comment ecrire ma procédure stockée ??
et mon problème est identique pour la validtion
d'une commande "Ajouter" avec une instruction INSERT ??

Si quelqu'un peut m'aider, il est le bienvenue,

Merci encore,
Thierry.


J'ai un problème récurrent qui est le suivant




Avatar
News Groups
Trés interressant,

Mais que veux tu dire par
"...UPDATEr toutes les colonnes et cela ne changera rien pour SQL Server .."

Cela signifie t-il de mettre à jour des colonnes par des valeurs inchangées,
type :
Valeur1 = Valeur d'origine pour Colonne1
UPDATE MaTable SET (Colonne1 = Valeur1..) ??

As tu un exemple à me donner ?

Merci encore,
Thierry.

"Med Bouchenafa" a écrit dans le message de news:
OvLXj#
Il ne faut pas faire de différence entre colonnes modifiées et colonnes


non modifiées
Il faut UPDATEr toutes les colonnes et cela ne changera rien pour SQL


Server et le code serait
beaucoup plus facile à écrire

--
Bien cordialement
Med Bouchenafa

"News Groups" a écrit dans le message de news:
41b58b4e$0$6500$
> Bonjour à tous,
>
> Je travaille avec des formulaires indépendants sous VBA (Access)
> qui modifient, ajoutent et suppriment des données sous SQL Server 2000.
> Mes formulaires sont "indépendants", c'est à dire que je selectionnent


mes
> données
> par le biais d'une intruction SELECT et je charge ces données dans mon
> formulaire à l'ouverture.
> Lors de la validation d'une modif une routine récupére toutes les


valeurs
> modifiées
> et au lieu de créer dynamiquement une instruction SQL UPDATE au niveau
> client,
> je voudrais exécuter une procédure stockée de type UPDATE dont les


valeurs
> modifiées
> sont passées par soit une valeur par paramétre ou soit sous forme de


liste
> concaténée et formatée avec séparateurs
> Ensuite la procédure stocké executerai un UPDATE pour les colonnes
> concernées avec les valeurs correspondantes.
> Mais le nombre de valeurs peu variées et les colonnes concernée ne sont


pas
> toujours les mêmes évidemment.
>
> Je ne sait comment ecrire ma procédure stockée ??
> et mon problème est identique pour la validtion
> d'une commande "Ajouter" avec une instruction INSERT ??
>
> Si quelqu'un peut m'aider, il est le bienvenue,
>
> Merci encore,
> Thierry.
>
>
> J'ai un problème récurrent qui est le suivant
>
>




Avatar
Fred BROUARD
Si dans la table
T_CLIENT (CLI_ID, CLI_NOM, CLI_PRENOM)
on trouve :
1, DUPONT, MARCEL
et que l'utilisateur modifie MARCEL en Jacques, alors l'update est :

UPDATE T_CLIENT
SET CLI_NOM = 'DUPONT',
CLI_PRENOM = 'Jacques'
WHERE CLI_ID = 1

Pourtant une seule colonne n'est effectivement réellement mise à jour...
Cela permet de faire de l'update générique plutôt que du SQL dynamique pas
optimisé du tout...

Le fin du fin est de faire des SP qui encapsulent INSERT et UPDATE, sachant que
la différence entre un insert et un update est que la clef n'est pas valué.
Exemple :

CREATE PROC SP_UPDINS_CLIENT @ID INT OUTPUT,
@NOM CHAR(32),
@PRENOM VARCHAR(25)
AS

IF @ID IS NULL
BEGIN
INSERT INTO T_CLIENT VALUES (@NOM, @PRENOM)
SET @ID = @@IDENTITY
END
ELSE
UPDATE T_CLIENT
SET CLI_NOM = @NOM,
CLI_PRENOM = @PRENOM
WHERE CLI_ID = @ID


A +

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



News Groups a écrit:
Trés interressant,

Mais que veux tu dire par
"...UPDATEr toutes les colonnes et cela ne changera rien pour SQL Server .."

Cela signifie t-il de mettre à jour des colonnes par des valeurs inchangées,
type :
Valeur1 = Valeur d'origine pour Colonne1
UPDATE MaTable SET (Colonne1 = Valeur1..) ??

As tu un exemple à me donner ?

Merci encore,
Thierry.

"Med Bouchenafa" a écrit dans le message de news:
OvLXj#

Il ne faut pas faire de différence entre colonnes modifiées et colonnes



non modifiées

Il faut UPDATEr toutes les colonnes et cela ne changera rien pour SQL



Server et le code serait

beaucoup plus facile à écrire

--
Bien cordialement
Med Bouchenafa

"News Groups" a écrit dans le message de news:
41b58b4e$0$6500$

Bonjour à tous,

Je travaille avec des formulaires indépendants sous VBA (Access)
qui modifient, ajoutent et suppriment des données sous SQL Server 2000.
Mes formulaires sont "indépendants", c'est à dire que je selectionnent





mes

données
par le biais d'une intruction SELECT et je charge ces données dans mon
formulaire à l'ouverture.
Lors de la validation d'une modif une routine récupére toutes les





valeurs

modifiées
et au lieu de créer dynamiquement une instruction SQL UPDATE au niveau
client,
je voudrais exécuter une procédure stockée de type UPDATE dont les





valeurs

modifiées
sont passées par soit une valeur par paramétre ou soit sous forme de





liste

concaténée et formatée avec séparateurs
Ensuite la procédure stocké executerai un UPDATE pour les colonnes
concernées avec les valeurs correspondantes.
Mais le nombre de valeurs peu variées et les colonnes concernée ne sont





pas

toujours les mêmes évidemment.

Je ne sait comment ecrire ma procédure stockée ??
et mon problème est identique pour la validtion
d'une commande "Ajouter" avec une instruction INSERT ??

Si quelqu'un peut m'aider, il est le bienvenue,

Merci encore,
Thierry.


J'ai un problème récurrent qui est le suivant












Avatar
News Groups
Merci de la précision,
cela signifie que c'est le moteur de SQL qui "évalue" si la colonne doit
être mise à jour ?
par quel principe, "l'horodatage" ?
Est ce propre à SQL Server ?

Merci de toutes autres infos,
Thierry.

"Fred BROUARD" a écrit dans le message de news:

Si dans la table
T_CLIENT (CLI_ID, CLI_NOM, CLI_PRENOM)
on trouve :
1, DUPONT, MARCEL
et que l'utilisateur modifie MARCEL en Jacques, alors l'update est :

UPDATE T_CLIENT
SET CLI_NOM = 'DUPONT',
CLI_PRENOM = 'Jacques'
WHERE CLI_ID = 1

Pourtant une seule colonne n'est effectivement réellement mise à jour...
Cela permet de faire de l'update générique plutôt que du SQL dynamique pas
optimisé du tout...

Le fin du fin est de faire des SP qui encapsulent INSERT et UPDATE,


sachant que
la différence entre un insert et un update est que la clef n'est pas


valué.
Exemple :

CREATE PROC SP_UPDINS_CLIENT @ID INT OUTPUT,
@NOM CHAR(32),
@PRENOM VARCHAR(25)
AS

IF @ID IS NULL
BEGIN
INSERT INTO T_CLIENT VALUES (@NOM, @PRENOM)
SET @ID = @@IDENTITY
END
ELSE
UPDATE T_CLIENT
SET CLI_NOM = @NOM,
CLI_PRENOM = @PRENOM
WHERE CLI_ID = @ID


A +

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



News Groups a écrit:
> Trés interressant,
>
> Mais que veux tu dire par
> "...UPDATEr toutes les colonnes et cela ne changera rien pour SQL Server


.."
>
> Cela signifie t-il de mettre à jour des colonnes par des valeurs


inchangées,
> type :
> Valeur1 = Valeur d'origine pour Colonne1
> UPDATE MaTable SET (Colonne1 = Valeur1..) ??
>
> As tu un exemple à me donner ?
>
> Merci encore,
> Thierry.
>
> "Med Bouchenafa" a écrit dans le message de


news:
> OvLXj#
>
>>Il ne faut pas faire de différence entre colonnes modifiées et colonnes
>
> non modifiées
>
>>Il faut UPDATEr toutes les colonnes et cela ne changera rien pour SQL
>
> Server et le code serait
>
>>beaucoup plus facile à écrire
>>
>>--
>>Bien cordialement
>>Med Bouchenafa
>>
>>"News Groups" a écrit dans le message de news:
>>41b58b4e$0$6500$
>>
>>>Bonjour à tous,
>>>
>>>Je travaille avec des formulaires indépendants sous VBA (Access)
>>>qui modifient, ajoutent et suppriment des données sous SQL Server 2000.
>>>Mes formulaires sont "indépendants", c'est à dire que je selectionnent
>
> mes
>
>>>données
>>>par le biais d'une intruction SELECT et je charge ces données dans mon
>>>formulaire à l'ouverture.
>>>Lors de la validation d'une modif une routine récupére toutes les
>
> valeurs
>
>>>modifiées
>>>et au lieu de créer dynamiquement une instruction SQL UPDATE au niveau
>>>client,
>>>je voudrais exécuter une procédure stockée de type UPDATE dont les
>
> valeurs
>
>>>modifiées
>>>sont passées par soit une valeur par paramétre ou soit sous forme de
>
> liste
>
>>>concaténée et formatée avec séparateurs
>>>Ensuite la procédure stocké executerai un UPDATE pour les colonnes
>>>concernées avec les valeurs correspondantes.
>>>Mais le nombre de valeurs peu variées et les colonnes concernée ne sont
>
> pas
>
>>>toujours les mêmes évidemment.
>>>
>>>Je ne sait comment ecrire ma procédure stockée ??
>>>et mon problème est identique pour la validtion
>>>d'une commande "Ajouter" avec une instruction INSERT ??
>>>
>>>Si quelqu'un peut m'aider, il est le bienvenue,
>>>
>>>Merci encore,
>>>Thierry.
>>>
>>>
>>>J'ai un problème récurrent qui est le suivant
>>>
>>>
>>
>>
>
>



Avatar
Patrice
A priori SQL Server remplace la valeur par la même valeur sans se préoccuper
de savoir si il y a effectivement ou non changement. De toute façon au
niveau du disque, il n'est de toute façon possible d'écrire les données que
par "page" (donc même metrre à jour une colonne provoquera la réécriture de
données non modifiées sur le disque).

D'un point de vue plus extérieur aux mécanismes internes :
- soit tu utilises des procédures stockées et tu mets tous les champs à jour
sans te préoccuper de savoir si ils ont été effectivement modifiés
- soit tu fais du SQL dynamique et tu peux alors générer la mise à jour
uniquement sr les colonnes modifiées mais tu perds l'avantage de la
précompilation des instructions SQL (entre autres).

Patrice

--

"News Groups" a écrit dans le message de
news:41b5d95b$0$6497$
Merci de la précision,
cela signifie que c'est le moteur de SQL qui "évalue" si la colonne doit
être mise à jour ?
par quel principe, "l'horodatage" ?
Est ce propre à SQL Server ?

Merci de toutes autres infos,
Thierry.

"Fred BROUARD" a écrit dans le message de


news:

> Si dans la table
> T_CLIENT (CLI_ID, CLI_NOM, CLI_PRENOM)
> on trouve :
> 1, DUPONT, MARCEL
> et que l'utilisateur modifie MARCEL en Jacques, alors l'update est :
>
> UPDATE T_CLIENT
> SET CLI_NOM = 'DUPONT',
> CLI_PRENOM = 'Jacques'
> WHERE CLI_ID = 1
>
> Pourtant une seule colonne n'est effectivement réellement mise à jour...
> Cela permet de faire de l'update générique plutôt que du SQL dynamique


pas
> optimisé du tout...
>
> Le fin du fin est de faire des SP qui encapsulent INSERT et UPDATE,
sachant que
> la différence entre un insert et un update est que la clef n'est pas
valué.
> Exemple :
>
> CREATE PROC SP_UPDINS_CLIENT @ID INT OUTPUT,
> @NOM CHAR(32),
> @PRENOM VARCHAR(25)
> AS
>
> IF @ID IS NULL
> BEGIN
> INSERT INTO T_CLIENT VALUES (@NOM, @PRENOM)
> SET @ID = @@IDENTITY
> END
> ELSE
> UPDATE T_CLIENT
> SET CLI_NOM = @NOM,
> CLI_PRENOM = @PRENOM
> WHERE CLI_ID = @ID
>
>
> A +
>
> --
> 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 *************************
>
>
>
> News Groups a écrit:
> > Trés interressant,
> >
> > Mais que veux tu dire par
> > "...UPDATEr toutes les colonnes et cela ne changera rien pour SQL


Server
.."
> >
> > Cela signifie t-il de mettre à jour des colonnes par des valeurs
inchangées,
> > type :
> > Valeur1 = Valeur d'origine pour Colonne1
> > UPDATE MaTable SET (Colonne1 = Valeur1..) ??
> >
> > As tu un exemple à me donner ?
> >
> > Merci encore,
> > Thierry.
> >
> > "Med Bouchenafa" a écrit dans le message de
news:
> > OvLXj#
> >
> >>Il ne faut pas faire de différence entre colonnes modifiées et


colonnes
> >
> > non modifiées
> >
> >>Il faut UPDATEr toutes les colonnes et cela ne changera rien pour SQL
> >
> > Server et le code serait
> >
> >>beaucoup plus facile à écrire
> >>
> >>--
> >>Bien cordialement
> >>Med Bouchenafa
> >>
> >>"News Groups" a écrit dans le message de news:
> >>41b58b4e$0$6500$
> >>
> >>>Bonjour à tous,
> >>>
> >>>Je travaille avec des formulaires indépendants sous VBA (Access)
> >>>qui modifient, ajoutent et suppriment des données sous SQL Server


2000.
> >>>Mes formulaires sont "indépendants", c'est à dire que je


selectionnent
> >
> > mes
> >
> >>>données
> >>>par le biais d'une intruction SELECT et je charge ces données dans


mon
> >>>formulaire à l'ouverture.
> >>>Lors de la validation d'une modif une routine récupére toutes les
> >
> > valeurs
> >
> >>>modifiées
> >>>et au lieu de créer dynamiquement une instruction SQL UPDATE au


niveau
> >>>client,
> >>>je voudrais exécuter une procédure stockée de type UPDATE dont les
> >
> > valeurs
> >
> >>>modifiées
> >>>sont passées par soit une valeur par paramétre ou soit sous forme de
> >
> > liste
> >
> >>>concaténée et formatée avec séparateurs
> >>>Ensuite la procédure stocké executerai un UPDATE pour les colonnes
> >>>concernées avec les valeurs correspondantes.
> >>>Mais le nombre de valeurs peu variées et les colonnes concernée ne


sont
> >
> > pas
> >
> >>>toujours les mêmes évidemment.
> >>>
> >>>Je ne sait comment ecrire ma procédure stockée ??
> >>>et mon problème est identique pour la validtion
> >>>d'une commande "Ajouter" avec une instruction INSERT ??
> >>>
> >>>Si quelqu'un peut m'aider, il est le bienvenue,
> >>>
> >>>Merci encore,
> >>>Thierry.
> >>>
> >>>
> >>>J'ai un problème récurrent qui est le suivant
> >>>
> >>>
> >>
> >>
> >
> >
>




Avatar
News Groups
Merci des précisions,

Thierry.

"Patrice" a écrit dans le message de news:
#9#
A priori SQL Server remplace la valeur par la même valeur sans se


préoccuper
de savoir si il y a effectivement ou non changement. De toute façon au
niveau du disque, il n'est de toute façon possible d'écrire les données


que
par "page" (donc même metrre à jour une colonne provoquera la réécriture


de
données non modifiées sur le disque).

D'un point de vue plus extérieur aux mécanismes internes :
- soit tu utilises des procédures stockées et tu mets tous les champs à


jour
sans te préoccuper de savoir si ils ont été effectivement modifiés
- soit tu fais du SQL dynamique et tu peux alors générer la mise à jour
uniquement sr les colonnes modifiées mais tu perds l'avantage de la
précompilation des instructions SQL (entre autres).

Patrice

--

"News Groups" a écrit dans le message de
news:41b5d95b$0$6497$
> Merci de la précision,
> cela signifie que c'est le moteur de SQL qui "évalue" si la colonne doit
> être mise à jour ?
> par quel principe, "l'horodatage" ?
> Est ce propre à SQL Server ?
>
> Merci de toutes autres infos,
> Thierry.
>
> "Fred BROUARD" a écrit dans le message de
news:
>
> > Si dans la table
> > T_CLIENT (CLI_ID, CLI_NOM, CLI_PRENOM)
> > on trouve :
> > 1, DUPONT, MARCEL
> > et que l'utilisateur modifie MARCEL en Jacques, alors l'update est :
> >
> > UPDATE T_CLIENT
> > SET CLI_NOM = 'DUPONT',
> > CLI_PRENOM = 'Jacques'
> > WHERE CLI_ID = 1
> >
> > Pourtant une seule colonne n'est effectivement réellement mise à


jour...
> > Cela permet de faire de l'update générique plutôt que du SQL dynamique
pas
> > optimisé du tout...
> >
> > Le fin du fin est de faire des SP qui encapsulent INSERT et UPDATE,
> sachant que
> > la différence entre un insert et un update est que la clef n'est pas
> valué.
> > Exemple :
> >
> > CREATE PROC SP_UPDINS_CLIENT @ID INT OUTPUT,
> > @NOM CHAR(32),
> > @PRENOM VARCHAR(25)
> > AS
> >
> > IF @ID IS NULL
> > BEGIN
> > INSERT INTO T_CLIENT VALUES (@NOM, @PRENOM)
> > SET @ID = @@IDENTITY
> > END
> > ELSE
> > UPDATE T_CLIENT
> > SET CLI_NOM = @NOM,
> > CLI_PRENOM = @PRENOM
> > WHERE CLI_ID = @ID
> >
> >
> > A +
> >
> > --
> > 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 *************************
> >
> >
> >
> > News Groups a écrit:
> > > Trés interressant,
> > >
> > > Mais que veux tu dire par
> > > "...UPDATEr toutes les colonnes et cela ne changera rien pour SQL
Server
> .."
> > >
> > > Cela signifie t-il de mettre à jour des colonnes par des valeurs
> inchangées,
> > > type :
> > > Valeur1 = Valeur d'origine pour Colonne1
> > > UPDATE MaTable SET (Colonne1 = Valeur1..) ??
> > >
> > > As tu un exemple à me donner ?
> > >
> > > Merci encore,
> > > Thierry.
> > >
> > > "Med Bouchenafa" a écrit dans le message


de
> news:
> > > OvLXj#
> > >
> > >>Il ne faut pas faire de différence entre colonnes modifiées et
colonnes
> > >
> > > non modifiées
> > >
> > >>Il faut UPDATEr toutes les colonnes et cela ne changera rien pour


SQL
> > >
> > > Server et le code serait
> > >
> > >>beaucoup plus facile à écrire
> > >>
> > >>--
> > >>Bien cordialement
> > >>Med Bouchenafa
> > >>
> > >>"News Groups" a écrit dans le message de news:
> > >>41b58b4e$0$6500$
> > >>
> > >>>Bonjour à tous,
> > >>>
> > >>>Je travaille avec des formulaires indépendants sous VBA (Access)
> > >>>qui modifient, ajoutent et suppriment des données sous SQL Server
2000.
> > >>>Mes formulaires sont "indépendants", c'est à dire que je
selectionnent
> > >
> > > mes
> > >
> > >>>données
> > >>>par le biais d'une intruction SELECT et je charge ces données dans
mon
> > >>>formulaire à l'ouverture.
> > >>>Lors de la validation d'une modif une routine récupére toutes les
> > >
> > > valeurs
> > >
> > >>>modifiées
> > >>>et au lieu de créer dynamiquement une instruction SQL UPDATE au
niveau
> > >>>client,
> > >>>je voudrais exécuter une procédure stockée de type UPDATE dont les
> > >
> > > valeurs
> > >
> > >>>modifiées
> > >>>sont passées par soit une valeur par paramétre ou soit sous forme


de
> > >
> > > liste
> > >
> > >>>concaténée et formatée avec séparateurs
> > >>>Ensuite la procédure stocké executerai un UPDATE pour les colonnes
> > >>>concernées avec les valeurs correspondantes.
> > >>>Mais le nombre de valeurs peu variées et les colonnes concernée ne
sont
> > >
> > > pas
> > >
> > >>>toujours les mêmes évidemment.
> > >>>
> > >>>Je ne sait comment ecrire ma procédure stockée ??
> > >>>et mon problème est identique pour la validtion
> > >>>d'une commande "Ajouter" avec une instruction INSERT ??
> > >>>
> > >>>Si quelqu'un peut m'aider, il est le bienvenue,
> > >>>
> > >>>Merci encore,
> > >>>Thierry.
> > >>>
> > >>>
> > >>>J'ai un problème récurrent qui est le suivant
> > >>>
> > >>>
> > >>
> > >>
> > >
> > >
> >
>
>