在SQL中更新多个列

时间:2012-01-31 12:37:04

标签: sql sql-server sql-update

有没有办法像使用insert语句一样更新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多列,这可能会非常令人厌烦。

13 个答案:

答案 0 :(得分:182)

试试这个:

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

这应该适用于大多数SQL方言,不包括Oracle。

是的 - 这是很多打字 - 这是SQL做到这一点的方式。

答案 1 :(得分:76)

“厌倦的方式”是标准SQL以及主流RDBMS如何做到这一点。

有100多列,你很可能有设计问题......还有,客户端工具中有缓解方法(例如生成UPDATE语句)或使用ORM

答案 2 :(得分:20)

Update table1 set (a,b,c) = (select x,y,x)语法是使用的一个例子 行值构造函数Oracle supports this,MSSQL没有。 (Connect item

答案 3 :(得分:15)

您的查询几乎正确无误。这个T-SQL是:

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

答案 4 :(得分:12)

<强> 语法

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

<强> 实施例

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

答案 5 :(得分:8)

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


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

你可以试试这个

答案 6 :(得分:2)

我尝试过这种方式并且工作正常:

UPDATE 
  Emp
SET 
  ID = 123, 
  Name = 'Peter' 
FROM 
  Table_Name

答案 7 :(得分:1)

这是一个有效的方法:

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

value是table_2

中的列

答案 8 :(得分:0)

如果您需要多次重新输入,可以像我曾经做过的那样。 将您的列名称放入Excel工作表中的行(在每个列名称末尾写下(=),这在记事本++中很容易)在右侧创建一个列来复制和粘贴您的值,该值将对应于新条目每一栏。然后在他们右边的一个独立专栏中将逗号设为

然后,您必须每次将值复制到中间列,然后粘贴然后运行

我不知道更简单的解决方案

答案 9 :(得分:0)

我想与您分享我如何解决此类问题。我的情况略有不同,因为table2的结果是动态的,并且列号可能小于table1的列号。但是概念是相同的。

首先,获取表2的结果。

enter image description here

下一步,取消枢纽。

enter image description here

然后使用动态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结果:

enter image description here

答案 10 :(得分:-3)

我在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作为服务器,就可以将其用于您喜欢的编程语言。

答案 11 :(得分:-4)

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

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

答案 12 :(得分:-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