Обновление таблицы из другой таблицы в SQL Server 2008 - PullRequest
0 голосов
/ 23 января 2012

У меня есть переменная временной таблицы со связкой столбцов:

 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
    )

Она заполняется данными из другой таблицы с помощью оператора вставки, и я хочу взять эти данные и обновить свою таблицу 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)

Возможно ли это сделать?Если это не так, пожалуйста, укажите мне в правильном направлении.

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Если я вас правильно понимаю, вы можете использовать что-то вроде этого:

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

Обратите внимание, что это будет работать только в том случае, если, как вы заявили в комментариях выше, в * 1004 есть только одна запись* за каждый ItemNumber.

1 голос
/ 23 января 2012

Поскольку вы работаете с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...