2013-07-08 159 views
1

我持有有关产品使用连接更新表

products 
+-----------+------------+ 
|productid |productname | 
|Int  |varchar(50) | 
+-----------+------------+ 


productdetail 
+---------+----------+------------+------+------+ 
|detailId |productid |description |price |stock | 
|Int  |Int  |Text  |Money |Int | 
|   |FK_From_ |   |  |  | 
|   |productid_|   |  |  | 
|   |products |   |  |  | 
+---------+----------+------------+------+------+ 

我试图通过将产品名称和股票的存储过程来更新使用TSQL的库存水平信息两个表。我希望能够做这样的事

Pseudo Code 

UPDATE productdetail.stock 
SET stock = @stock 
WHERE productdetail.productid = products.productname 

我“觉得”我需要使用某种连接语句,并已经看过this

,并试图改变它适合我代码但没有成功。

是我想在一个查询中做到的可能吗?或将我需要首先选择的产品ID,将其设置为一个变量,然后用它作为我的更新查询的一部分,如果有可能,因此与JOIN语句将它看起来like此:

UPDATE tab_productdetails 
SET stock = @newStock 
FROM tab_productdetails productid 
INNER JOIN 
tab_productdetails productid ON 
@productName = tab_products.productname 

我正在使用SQL Server 2012 express。如果这有什么区别。

回答

2

您不需要JOIN来更新表格。您需要使用whereselect

UPDATE productdetail 
SET stock = @stock 
WHERE productid = (select productid from products where productname = @productname) 

这里@productname是要传递到查询的产品名称。

+0

干杯。我以为自己脑子里已经有一点点了。 – Qu1nncunxIV

1

你不需要需要一个连接(但你可以这样做)。 最清晰的方式是用子查询:

UPDATE productdetail 
SET stock = @newStock 
WHERE productid = (SELECT productid FROM products WHERE [email protected])