2014-10-04 55 views
1

我正在處理包含客戶,產品,時間表等商店的數據庫。我正在處理的問題包括創建一個將「開/關」列更改爲關閉的程序(默認情況下,產品可用(1),並且此過程將其變爲0)我已經將程序寫入正確:設置變量SQL過程

create proc p_fudgemart_deactivate_product 
(
    @product_id int 
) 
as 
begin 
update fudgemart_products 
set product_is_active = 0 
where product_id = @product_id 
end 

但問題出現在我們獲得產品名稱並需要編寫select語句以將該產品更改爲不可用時。我知道這需要使用變量,但我無法弄清楚如何將該變量設置爲該產品的產品ID。我在想:

Declare @prod_name_id int 
    set @prod_name_id= (select product_id from fudgemart_products 
    where product_name = 'Slot Screwdriver') 
    execute p_fudgemart_deactivate_product product_id @prod_name_id 

我能夠在我的變量聲明中使用select嗎?

+0

是'product_name'獨特之處?如在,可以有多個記錄,名稱爲「槽螺絲刀」? – 2014-10-04 18:02:04

回答

1

實際上你是在正確的軌道上。嘗試是這樣的:

declare @prod_name_id int 

select @prod_name_id = product_id 
from fudgemart_products 
where product_name = 'Slot Screwdriver' 

exec p_fudgemart_deactivate_product 
    @product_id = @prod_name_id 
+0

非常感謝!由於product_name正在向過程提供product_id,我是否需要重複此操作才能在多個項目上執行該過程?而不是能夠添加一個OR?例如: 'where product_name ='slot screwdriver'OR product_name ='hammer'' – wmiller11293 2014-10-04 18:17:38

+0

@ wmiller11293您真的需要在這種情況下調用其他過程嗎? 'UPDATE dbo.fudgemart_products SET product_is_active = 0 WHERE product_name IN('slot screwdriver','hammer');' – 2014-10-04 19:55:06

0

如果您使用的是SQL Server 2008或更高版本,可以聲明和在一個聲明中分配:

DECLARE @prod_name_id int = (SELECT product_id 
           FROM  fudgemart_products 
           WHERE  product_name = 'Slot Screwdriver' 
          ); 
EXECUTE p_fudgemart_deactivate_product @product_id = @prod_name_id;