Je me mets doucement aux procédures stockées. J'aimerai en fait combiner ces
deux requêtes :
SELECT
COUNT(ItemId) AS ItemsCount
FROM Items
WHERE StoreId = @StoreId
Récupérer la valeur de ItemsCount et la mettre à jour dans la table Stores :
UPDATE
Stores
SET
ItemsCount = @ItemsCount
WHERE
StoreId = @StoreId
Comment dire que le résultat de la requête SELECT doit être affecté à une
variable et qu'ensuite j'utilise la valeur de cette variable pour la mettre
à jour dans une autre table ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Steve Kass
Julien,
Si vous n'avez besoin de la valeur de ItemsCount qu'afin de mettre à jour la table Stores:
update Stores set ItemsCount = ( select count(*) from Items where StoreId = @StoreId ) where StoreId = @StoreId
Si vous voulez voir la valeur de ItemsCount comme résultat, ainsi que faire le mise-à-jour:
declare @ItemsCount int set @ItemsCount = ( select count(*) from Items where StoreId = @StoreId ) select @ItemsCount as ItemsCount update Stores set ItemsCount = @ItemsCount where ItemId = @ItemId
Est-ce que le but est que les valeurs ItemsCount soient toujours correctes? Une autre possibilité est de créér une vue indexée, ce qui assure que les résultats sont correctes après toute requête UPDATE ou INSERT sur Items, et que la sélection d'un ItemCount est efficace. Voilà un exemple à partire de la bd Northwind:
create view ProductCountByOrderA with schemabinding as select OrderID, count_big(ProductID) ProductCount from dbo.[Order Details] group by OrderID go
create unique clustered index ProductCountByOrderA_uci on ProductCountByOrderA(OrderID) go
-- Si toute Order comprend un Product au moins, -- ce 2ème vue n'est pas nécessaire. create view ProductCountByOrder as select O.OrderID, coalesce(PC.ProductCount,0) as ProductCount from Orders O left join ProductCountByOrderA PC on O.OrderID = PC.OrderID go
select ProductCount from ProductCountByOrder where OrderID = 11077 select ProductCount from ProductCountByOrder where OrderID = 11111 go
drop view ProductCountByOrder, ProductCountByOrderA
SK
Julien C. wrote:
Bonjour,
Je me mets doucement aux procédures stockées. J'aimerai en fait combiner ces deux requêtes :
SELECT COUNT(ItemId) AS ItemsCount FROM Items WHERE StoreId = @StoreId
Récupérer la valeur de ItemsCount et la mettre à jour dans la table Stores :
UPDATE Stores SET ItemsCount = @ItemsCount WHERE StoreId = @StoreId
Comment dire que le résultat de la requête SELECT doit être affecté à une variable et qu'ensuite j'utilise la valeur de cette variable pour la mettre à jour dans une autre table ?
Merci !
Julien C.
Julien,
Si vous n'avez besoin de la valeur de ItemsCount qu'afin de mettre à
jour la table Stores:
update Stores set
ItemsCount = (
select count(*) from Items
where StoreId = @StoreId
)
where StoreId = @StoreId
Si vous voulez voir la valeur de ItemsCount comme résultat, ainsi que
faire le mise-à-jour:
declare @ItemsCount int
set @ItemsCount = (
select count(*) from Items
where StoreId = @StoreId
)
select @ItemsCount as ItemsCount
update Stores set
ItemsCount = @ItemsCount
where ItemId = @ItemId
Est-ce que le but est que les valeurs ItemsCount soient toujours
correctes? Une autre possibilité est de créér une vue indexée, ce qui
assure que les résultats sont correctes après toute requête UPDATE ou
INSERT sur Items, et que la sélection d'un ItemCount est efficace.
Voilà un exemple à partire de la bd Northwind:
create view ProductCountByOrderA with schemabinding as
select OrderID, count_big(ProductID) ProductCount
from dbo.[Order Details]
group by OrderID
go
create unique clustered index ProductCountByOrderA_uci
on ProductCountByOrderA(OrderID)
go
-- Si toute Order comprend un Product au moins,
-- ce 2ème vue n'est pas nécessaire.
create view ProductCountByOrder as
select
O.OrderID,
coalesce(PC.ProductCount,0) as ProductCount
from Orders O left join ProductCountByOrderA PC
on O.OrderID = PC.OrderID
go
select ProductCount from ProductCountByOrder
where OrderID = 11077
select ProductCount from ProductCountByOrder
where OrderID = 11111
go
drop view ProductCountByOrder, ProductCountByOrderA
SK
Julien C. wrote:
Bonjour,
Je me mets doucement aux procédures stockées. J'aimerai en fait combiner ces
deux requêtes :
SELECT
COUNT(ItemId) AS ItemsCount
FROM Items
WHERE StoreId = @StoreId
Récupérer la valeur de ItemsCount et la mettre à jour dans la table Stores :
UPDATE
Stores
SET
ItemsCount = @ItemsCount
WHERE
StoreId = @StoreId
Comment dire que le résultat de la requête SELECT doit être affecté à une
variable et qu'ensuite j'utilise la valeur de cette variable pour la mettre
à jour dans une autre table ?
Si vous n'avez besoin de la valeur de ItemsCount qu'afin de mettre à jour la table Stores:
update Stores set ItemsCount = ( select count(*) from Items where StoreId = @StoreId ) where StoreId = @StoreId
Si vous voulez voir la valeur de ItemsCount comme résultat, ainsi que faire le mise-à-jour:
declare @ItemsCount int set @ItemsCount = ( select count(*) from Items where StoreId = @StoreId ) select @ItemsCount as ItemsCount update Stores set ItemsCount = @ItemsCount where ItemId = @ItemId
Est-ce que le but est que les valeurs ItemsCount soient toujours correctes? Une autre possibilité est de créér une vue indexée, ce qui assure que les résultats sont correctes après toute requête UPDATE ou INSERT sur Items, et que la sélection d'un ItemCount est efficace. Voilà un exemple à partire de la bd Northwind:
create view ProductCountByOrderA with schemabinding as select OrderID, count_big(ProductID) ProductCount from dbo.[Order Details] group by OrderID go
create unique clustered index ProductCountByOrderA_uci on ProductCountByOrderA(OrderID) go
-- Si toute Order comprend un Product au moins, -- ce 2ème vue n'est pas nécessaire. create view ProductCountByOrder as select O.OrderID, coalesce(PC.ProductCount,0) as ProductCount from Orders O left join ProductCountByOrderA PC on O.OrderID = PC.OrderID go
select ProductCount from ProductCountByOrder where OrderID = 11077 select ProductCount from ProductCountByOrder where OrderID = 11111 go
drop view ProductCountByOrder, ProductCountByOrderA
SK
Julien C. wrote:
Bonjour,
Je me mets doucement aux procédures stockées. J'aimerai en fait combiner ces deux requêtes :
SELECT COUNT(ItemId) AS ItemsCount FROM Items WHERE StoreId = @StoreId
Récupérer la valeur de ItemsCount et la mettre à jour dans la table Stores :
UPDATE Stores SET ItemsCount = @ItemsCount WHERE StoreId = @StoreId
Comment dire que le résultat de la requête SELECT doit être affecté à une variable et qu'ensuite j'utilise la valeur de cette variable pour la mettre à jour dans une autre table ?