2012-01-23 26 views
0

に別のテーブルからテーブルを更新する私は、列の束を持つ一時テーブル変数を持っている:SQL Server 2008の

Declare @GearTemp table 
    (
     ItemNumber varchar(20), 
     VendorNumber varchar(6), 
     ItemStatus varchar(20), 
     Style varchar(20), 
     ItemName varchar(100), 
     ItemDescription varchar(1000), 
     Color varchar(50), 
     [Size] varchar(50), 
     ItemCost decimal(9,4), 
     IsQuickShipFl bit, 
     IsEmbroiderable bit, 
     IsBackOrderable bit, 
     LoadDate smalldatetime 
    ) 

それは、INSERT文を介して他のテーブルからのデータで満たされます、そして、私が撮りたいですそのデータを更新してProductsテーブルを更新します。可能であれば、私は次のようなことをしたいと思います:

Update Products blah blah blah all columns where itemnumbers match up 
SELECT * FROM @GearTemp FT 
WHERE EXISTS (SELECT P.ItemNumber FROM Products P WHERE FT.ItemNumber = P.ItemNumber) 

それは可能ですか?そうでない場合は、正しい方向に私を指摘してください。

+0

@GearTempで複数のレコードが任意の製品レコードのためにそこにあることはできますか?その場合、あなたは何をしたいですか? – mwigdahl

+0

Itemnumberが主キーであるため、数字は一意になります。それはあなたの求めるものですか? – broke

+0

ItemNumberは_and_GearTemp製品の主キーですか?私は、与えられたItemNumberに対して@GearTempに複数のエントリが存在するかどうか疑問に思っています。もしそうなら、どのように処理したいのですか? – mwigdahl

答えて

4

私が正しくあなたを理解していれば、あなたはこのようなものを使用することができます:あなたは上記のコメントで述べたように、それぞれの@GearTempでしかつのエントリがあり、場合にのみ動作すること

UPDATE p SET X = gt.X, Y = gt.Y -- etc... (not sure whether your column names match up) 
FROM Products p 
    INNER JOIN @GearTemp gt ON p.ItemNumber = gt.ItemNumber 

注意をItemNumber

+0

あなたの答えは正しい方向で私を指摘しましたが、構文は次のようにする必要があります:UPDATE P SET PX = GT.X、PY = GT.Y製品P \t INNER JOIN @GearTemp AS GT ON PX = GT.X – broke

+0

Ah 、申し訳ありませんが、投稿前にSSMSで構文チェックをしませんでした。私はそれに応じてそれを編集します。嬉しいことに、それはあなたを助けました! – mwigdahl

1

あなたはSQL Server 2008で作業しているので、あなたがMERGE文を使用することができますに:

-- Target Table 

DECLARE @tgt TABLE (OrdID INT, ItemID INT, Qty INT, Price MONEY); 
INSERT INTO @tgt (OrdID, ItemID, Qty, Price) 
    SELECT 1, 100, 10, 10.00 UNION ALL 
    SELECT 1, 101, 10, 12.00 


OrdID  ItemID  Qty   Price 
----------- ----------- ----------- --------------------- 
1   100   10   10.00 
1   101   10   12.00 

-- Source Table 
DECLARE @src TABLE (OrdID INT, ItemID INT, Qty INT, Price MONEY); 
INSERT INTO @src (OrdID, ItemID, Qty, Price) 
    SELECT 1, 100, 12, 10.00 UNION ALL 
    SELECT 1, 102, 10, 12.00 UNION ALL 
    SELECT 1, 103, 5, 7.00 


OrdID  ItemID  Qty   Price 
----------- ----------- ----------- --------------------- 
1   100   12   13.00 
1   102   10   12.00 
1   103   5   7.00 

MERGE @tgt AS t 
USING @src AS s 
ON t.OrdID = s.OrdID AND t.ItemID = s.ItemID 
WHEN MATCHED THEN 
    UPDATE SET 
    t.Qty = s.Qty, 
    t.Price = s.Price; 



Content of the target table after the MERGE operation: 
OrdID  ItemID  Qty   Price 
----------- ----------- ----------- --------------------- 
1   100   12   13.00