2012-01-31 20 views
123

Czy istnieje sposób aktualizacji wielu kolumn w serwerze SQL w taki sam sposób, w jaki jest używana instrukcja wstawiania?Aktualizacja wielu kolumn w SQL

Coś jak:

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 

Albo coś w tym stylu, a nie tak:

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

który może być dość męczące napisać, jeśli masz 100 + kolumny.

+0

Jakiego serwera używasz? – sll

+0

Brzmi dość podatnie na błędy. – AD7six

+0

To tylko przykład, a nie pełny kod. Używam MSSQL – Joe

Odpowiedz

66

"Męczący sposób" jest standardowym SQL i jak robi to główny system RDBMS.

Za pomocą ponad 100 kolumn, to prawdopodobnie najczęściej mają problem projektowania ... również, istnieją metody łagodzące w narzędzi klienckich (np generacji oświadczenia UPDATE) lub za pomocą ORMs

+3

Więc nie ma innego sposobu, aby to zrobić w MSSQL? – Joe

+2

@Joe: nie. Zobacz odpowiedź od Alexa K poniżej (http://stackoverflow.com/a/9079904/27535), jest prośba do MS, aby go dodać. – gbn

+0

Myślę, że korzystam z http://www.1kekeydata.com/sql/sqlupdate.html "USTAW kolumnę_1 = [wartość1], kolumna_2 = [wartość2]" – DeLe

144

Spróbuj tego:

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

Powinno to działać w większości dialektów SQL, z wyjątkiem Oracle.

I tak - to dużo pisania - tak robi SQL.

+3

To nie zadziała w Oracle: http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj26498.html –

+2

@ Rafał: pytanie dotyczyło Microsoft ** SQL Server ** ... –

+13

Witam . Masz rację, ale chciałem tylko powiedzieć, że nie działa w żadnym dialekcie SQL. –

15

Twoje zapytanie jest prawie poprawne. T-SQL dla to:

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

Podejrzewam, że OP używał luźnego aliasu, ponieważ pytanie nie dotyczy poprawności składni, ale "dlaczego" tej składni. Osobiście wolę używać aliasów tak jak tutaj: http://stackoverflow.com/a/982947/27535 – gbn

1

tutaj jest jeden, który działa:

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

wartość jest kolumna z table_2

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


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

Można spróbować to

+0

Działa to w SQLServer, thanx! – IvoTops

-7
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 
+2

Dodaj komentarz do swojej odpowiedzi, aby wyjaśnić, co robi. W chwili obecnej jest oznaczony jako odpowiedź niskiej jakości i zostanie usunięty, chyba że poprawiony. – Ian

0

Jeśli trzeba ponownie wpisz to kilka razy, możesz zrobić tak, jak zrobiłem to raz. Uzyskaj nazwy kolumn w wierszach w arkuszu Excela (zapisz na końcu każdej nazwy kolumny (=), co jest łatwe w notatniku ++) po prawej stronie utwórz kolumnę do skopiowania i wklejenia wartości, która będzie odpowiadać nowym wpisom w każdej kolumnie.Następnie po prawej stronie z nich w sposób niezależny kolumnie umieścić przecinki jako przeznaczone

następnie trzeba będzie skopiować wartości w środkowej kolumnie za każdym razem, a potem po prostu wkleić potem i uruchomić

nie wiem łatwiejsze rozwiązanie

0

próbowałem z tym sposób i jego pracy grzywny:

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

Składnia

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

Przykład

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

Zrobiłem to w MySQL i aktualizacje wiele kolumn w jednym rekordzie, więc spróbuj to jeśli używasz MySql jako serwer:

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

Jednak kodowałem w vb.net przy użyciu serwera MySql, ale możesz zabrać go do swojego ulubionego języka programowania, o ile używasz MySql jako swojego serwera.