Обновление нескольких столбцов в SQL

есть ли способ обновить несколько столбцов в SQL server так же, как используется инструкция insert?

что-то типа:

Update table1 set (a,b,c,d,e,f,g,h,i,j,k)=
(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k)
from table2 t2
where table1.id=table2.id

или что-то в этом роде, а не так:

update table set a=t2.a,b=t2.b etc 

что может быть довольно утомительно писать, если у вас 100+ столбцов.

12 ответов


"утомительный способ" - это стандартный SQL и как это делают основные СУБД.

с столбцами 100+ у вас, скорее всего, есть проблема с дизайном... кроме того, существуют методы смягчения в клиентских средствах (например, инструкции обновления поколения) или с помощью ORMs


попробуйте это:

UPDATE table1 
SET a = t2.a, b = t2.b, .......
FROM table2 t2
WHERE table1.id = t2.id

Это должно работать на большинстве диалектов SQL, за исключением Oracle.

и да-это много ввода-это то, как SQL делает это.


на Update table1 set (a,b,c) = (select x,y,x) синтаксис, пример использования конструкторы значений строк,Oracle поддерживает этот, MSSQL не делает. (подключить пункт)


ваш запрос почти правильный. T-SQL для этого:

UPDATE  Table1
SET     Field1 = Table2.Field1,
        Field2 = Table2.Field2,
        other columns...
FROM    Table2
WHERE   Table1.ID = Table2.ID

   UPDATE t1 
    SET 
    t1.a = t2.a,
    t1.b = t2.b,
    .
    .
    .


    FROM 
    table1 t1 
    INNER JOIN table2 t2 ON  t1.id=t2.id

вы можете попробовать это


синтаксис

UPDATE table-name 
SET column-name = value, column-name = value, ...
WHERE condition

пример

UPDATE school
SET course = 'mysqli', teacher = 'Tanzania', student = 'you'
WHERE id = 6

вот что работает:

UPDATE  `table_1`
INNER JOIN 
 `table_2` SET  col1= value, col2= val,col3= val,col4= val;

значение-столбец из table_2


Если вам нужно перепечатать это несколько раз, вы можете сделать так, как я сделал один раз. Получите имена ваших столбцов в строки на листе excel (запишите в конце каждого имени столбца ( = ), что легко в notepad++) с правой стороны сделайте столбец для копирования и вставки вашего значения, которое будет соответствовать новым записям в каждом столбце. Затем справа от них в самостоятельную колонку ставим запятые, как задумано

тогда вам придется каждый раз копировать свои значения в средний столбец просто вставьте и запустите

Я не знаю более простого решения


Я пробовал с этим способом и его работа отлично:

UPDATE 
  Sub2 
SET 
  SLNNOND = Sub.SLNNOND, 
  Sub2.SLNNONF = Sub.SLNNONF 
FROM 
  #TEMP Sub2

Я сделал это в MySql, и он обновил несколько столбцов в одной записи, поэтому попробуйте это, если вы используете MySql в качестве сервера:

"UPDATE creditor_tb SET credit_amount='" & CDbl(cur_amount) & "'
                   , totalamount_to_pay='" & current_total & "',   
        WHERE credit_id='" & lbcreditId.Text & "'". 

тем не менее, я кодировал в vb.net использование MySql server, но вы можете взять его на свой любимый язык программирования, насколько вы используете MySql в качестве сервера.


UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

http://www.w3schools.com/sql/sql_update.asp


update T1
set T1.COST2=T1.TOT_COST+2.000,
T1.COST3=T1.TOT_COST+2.000,
T1.COST4=T1.TOT_COST+2.000,
T1.COST5=T1.TOT_COST+2.000,
T1.COST6=T1.TOT_COST+2.000,
T1.COST7=T1.TOT_COST+2.000,
T1.COST8=T1.TOT_COST+2.000,
T1.COST9=T1.TOT_COST+2.000,
T1.COST10=T1.TOT_COST+2.000,
T1.COST11=T1.TOT_COST+2.000,
T1.COST12=T1.TOT_COST+2.000,
T1.COST13=T1.TOT_COST+2.000
from DBRMAST T1 
inner join DBRMAST t2 on t2.CODE=T1.CODE