1

我有两张表,其中包含有关产品的信息

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


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

我正在尝试通过将 productName 和 stock 传递给存储过程来使用 TSQL 更新库存水平。我希望能够做这样的事情

Pseudo Code

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

我“认为”我需要使用某种连接语句并查看了这个

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

我想在一个查询中做的事情是可能的吗?或者我是否需要先选择 productid,将其设置为一个变量,然后将其用作我的更新查询的一部分,如果可以使用 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。如果这有什么不同的话。

4

2 回答 2

2

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

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

@productname是您传递给查询的产品名称。

于 2013-07-08T08:57:45.803 回答
1

不需要加入(但您可以这样做)。最清晰的方法是使用子查询:

UPDATE productdetail
 SET stock = @newStock 
WHERE productid = (SELECT productid FROM products WHERE product_name=@productname)
于 2013-07-08T09:01:21.793 回答