有没有办法像使用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多列,这可能会非常令人厌烦。
答案 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的结果。
下一步,取消枢纽。
然后使用动态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
结果:
答案 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;
答案 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