2010-12-07 6 views
7

У меня есть таблица вроде этого:Обновление нескольких строк с различными значениями в SQL

SKU   Size 
A    10 
B    10 
C    10 
D    10 
E    10 
F    10 
G    10 

Я хочу изменить его на:

SKU   Size 
A    20 
B    10 
C    30 
D    10 
E    80 
F    10 
G    60 

У меня есть более чем 3000 строк записей для обновления. Как это сделать с помощью команды SQL update?

+3

И каковы будут критерии для обновления различных строки для разных значений? – 2010-12-07 07:34:57

+1

Как мы можем определить, какое преобразование применимо к каждой строке? – 2010-12-07 07:35:30

+0

Можете ли вы быть более конкретным относительно структуры вашей базы данных. Каждый из этих столбцов или некоторые значения столбцов? – 2010-12-07 07:35:39

ответ

0

использования делают из OpenXML разрешить ваш вопрос

пример

declare @i int 

exec sp_xml_preparedocument @i output, 
'<mydata> 
    <test xmlID="3" xmlData="blah blah blah"/> 
    <test xmlID="1" xmlData="blah"/> 
</mydata>' 

insert into test 
select xmlID, xmlData 
from OpenXml(@i, 'mydata/test') 
with (xmlID int, xmlData nvarchar(30)) 
where xmlID not in (select xmlID from test) 

update test 
set test.xmlData = ox.xmlData 
from OpenXml(@i, 'mydata/test') 
with (xmlID int, xmlData nvarchar(30)) ox 
where test.xmlID = ox.xmlID 

exec sp_xml_removedocument @i 
0

Просто делать ...

UPDATE [yourTable] SET Size = 20 WHERE SKU = 'A' 

И сделать это для всех значений, которые вы хотите изменить .. .

16
UPDATE T 
SET Size = CASE SKU 
    WHEN 'A' THEN 20 
    WHEN 'B' THEN 10 
    WHEN 'C' THEN 30 
    WHEN ... 
END 

Или может быть формула для вычисления размера, но вы не смогли дать ее в своем вопросе (или нам, возможно, придется переключиться на более сложное выражение CASE, но опять же, слишком мало деталей в вопросе).

0

Ну, если у вас нет формулы для расчета Size с, и у вас нет файла или листа Excel с данными, которые вы можете массировать в свой стол, вам просто нужно будет получить какой-нибудь неудачливый стажер, чтобы набрать что-то вроде

UPDATE <table> SET Size = <value> WHERE SKU = '<key>' 

3000 раз.

Если вы что стажер, я предложил бы дать нам немного больше информации ...

4

Создание таблицы с отображением SKU до нового размера; обновите основную таблицу.

Многие диалекты SQL имеют обозначения для выполнения обновлений через объединенные таблицы. Некоторые этого не делают. Это будет работать там, где нет такого обозначения:

CREATE TABLE SKU_Size_Map 
(
    SKU  CHAR(16) NOT NULL, 
    Size INTEGER NOT NULL 
); 
...Populate this table with the SKU values to be set... 
...You must have such a list... 

UPDATE MasterTable 
    SET Size = (SELECT Size FROM SKU_Size_Map 
       WHERE MasterTable.SKU = SKU_Size_Map.Size) 
WHERE SKU IN (SELECT SKU FROM SKU_Size_Map); 

Главное условие WHERE необходимо избегать установки размера до нуля, где нет соответствующей строки.

Возможно, вы также можете сделать это с помощью инструкции MERGE. Но ключевое понимание любой из этих обозначений состоит в том, что вам нужна таблица для сопоставления между SKU и размером. Вам либо нужна таблица, либо вам нужен алгоритм, и образцы данных не предлагают алгоритм.

-2

Поскольку вы хотели бы изменить весь столбец, снимете определенный столбец с помощью этого:

ALTER TABLE table_name 
DROP COLUMN column_name; 

затем создать новый столбец с помощью:

ALTER TABLE table_name 
ADD column_name varchar(80); 
Смежные вопросы