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 votre
update code> (qui fait référence à la même table) que vous souhaitez
update code> la valeur de
col5 code> avec plusieurs valeurs de
col1 code> de la même table où une seule valeur de
col1 code> a la valeur de chaque valeur dans
col1 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.