2014-10-04 80 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;