簡體   English   中英

更新 SQL 中的多列

[英]Update multiple columns in SQL

有沒有辦法像使用插入語句一樣更新 SQL Server 中的多個列?

就像是:

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 多列,寫起來會很累。

試試這個:

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

這應該適用於大多數 SQL 方言,不包括 Oracle。

是的 - 需要大量輸入 - 這就是 SQL 執行此操作的方式。

“令人厭煩的方式”是標准 SQL 以及主流 RDBMS 如何做到這一點。

有 100 多列,您很可能會遇到設計問題……此外,客戶端工具(例如生成 UPDATE 語句)或使用 ORM 也有緩解方法

句法

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 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 
  Emp
SET 
  ID = 123, 
  Name = 'Peter' 
FROM 
  Table_Name

這是一個有效的方法:

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

值是 table_2 中的列

如果你需要重新輸入幾次,你可以像我曾經做過的那樣。 將您的列名放入 excel 表中的行中(在每個列名的末尾寫下(在記事本++中很容易))在右側制作一列以復制和粘貼您的值,該列將對應於新條目每列。 然后在它們的右側在一個獨立的列中按設計放置逗號

然后你每次都必須將你的值復制到中間列然后粘貼然后運行

我不知道更簡單的解決方案

我想與您分享我如何解決此類問題。 我的情況略有不同,因為 table2 的結果是動態的,並且列數可能小於 table1 的列數。 但概念是一樣的。

首先得到table2的結果。

在此處輸入圖片說明

接下來,取消旋轉它。

在此處輸入圖片說明

然后使用動態 SQL 編寫更新查詢。 示例代碼用於測試 2 個簡單的表 - tblA 和 tblB

--CREATE TABLE tblA(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--CREATE TABLE tblB(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--INSERT INTO tblA(id, col1, col2, col3, col4)
--VALUES(1,'A1','A2','A3','A4')
--INSERT INTO tblB(id, col1, col2, col3, col4)
--VALUES(1,'B1','B2','B3','B4')

DECLARE @id VARCHAR(10) = 1, @TSQL NVARCHAR(MAX)
DECLARE @tblPivot TABLE(    
    colName VARCHAR(255),
    val VARCHAR(255)
)

INSERT INTO @tblPivot
SELECT colName, val
FROM tblB
UNPIVOT
(
    val
    FOR colName IN (col1, col2, col3, col4)
) unpiv
WHERE id = @id

SELECT @TSQL = COALESCE(@TSQL + '''
,','') + colName + ' = ''' + val
FROM @tblPivot

SET @TSQL = N'UPDATE tblA
SET ' + @TSQL + ''' 
WHERE id = ' + @id
PRINT @TSQL
--EXEC SP_EXECUTESQL @TSQL

PRINT @TSQL結果:

在此處輸入圖片說明

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

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

我在 MySql 中做了這個,它更新了單個記錄中的多個列,所以如果你使用 MySql 作為你的服務器,試試這個:

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

但是,我使用 MySql 服務器在 vb.net 中編碼,但是只要您使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM