J'ai une procédure stockée qui sélectionne quelques enregistrements d'une table. Dans la même procédure stockée, je souhaite exécuter une instruction de mise à jour faisant référence à la clé primaire à la requête de sélection exécutée ci-dessus.
comme exemple P>
create table emp (id int, name varchar(30),age int,status bit) insert into emp values (1,'sam',23,null) insert into emp values (2,'mike',33,null) insert into emp values (3,'marc',42,null) create procedure myproc as begin select top 1 id,name from emp where age>30 order by id --it will return row number 2 with id "2" update emp set status='1' where id =2 -- "2" is the id we got as a result of above select query end
3 Réponses :
Vous semblez vouloir:
create procedure myproc
as
begin
select col1, col2, col3
into #tempt
from table;
update table
set col5 = value
where col1 in (select col1 from #tempt)
end;
Merci de votre aide. Je cherche s'il existe une autre façon la plus optimisée de l'obtenir.
@Sachumine Pourquoi pensez-vous que cette solution est moins optimisée?
à cause de 2 déclarations sélectionnées
@Sachumine Query / SP La performance n'est pas mesurée dans le nombre de déclarations de sélection.
Si vous ne voulez pas subquiery, vous pouvez rejoindre:
create procedure myproc
as
begin
select col1, col2, col3
from table
where 'some conditions'
update t1
set col5 = value
from table t1
inner join
(
select col1
--obviusly you do not need this columns here..., col2, col3
from table
where 'some conditions'
)t2
on t1.col1 = t2.col1
end
Si vous souhaitez mettre à jour quelque chose et obtenir les données stockées dans le tableau avant la mise à jour, vous pouvez utiliser une requête simple update code> avec sortie code> EMP CODE> Mise en œuvre de votre logique commerciale ( Révision 6 ). P> P>
Cela n'est pas clair. Votre
SELECT CODE> va renvoyer plusieurs lignes, donc avec votreupdate code> (qui fait référence à la même table) que vous souhaitezupdate code> la valeur decol5 code> avec plusieurs valeurs decol1 code> de la même table où une seule valeur decol1 code> a la valeur de chaque valeur danscol1 code>? Ce serait impossible et n'a pas de sens. Exemples de données et attendre des résultats vaut mieux expliquer ce que vous êtes vraiment i> après.@Larnu pourriez-vous s'il vous plaît aider maintenant
Juste pour clarifier: Vous souhaitez mettre à jour des enregistrements et obtenir également les données stockées dans le tableau avant la mise à jour sous forme de résultatsset de la procédure stockée. (Ou voulez-vous à la fois les valeurs précédentes et nouvelles?)
S'il vous plaît voir la modification pour obtenir plus de clarté
@Sachumine Vos modifications ne sont pas cohérentes, ce qui me suggère que soit vous n'avez pas d'exigence d'entreprise claire ou que vous ne pouvez pas les présenter correctement. S'il vous plaît dites-nous, ce dont vous avez vraiment besoin.