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