1

製品に関する情報を保持する 2 つのテーブルがあります

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


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

productName と在庫をストアド プロシージャに渡すことにより、TSQL を使用して在庫レベルを更新しようとしています。私はこのようなことができることを望んでいました

Pseudo Code

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

私は何らかの結合ステートメントを使用する必要があると「考え」、これを見てきまし

私のコードに合うように変更しようとしましたが、成功しませんでした。

私がやろうとしていることは、1 つのクエリで可能ですか? または、最初に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 に答える