关于SQL UPDATE关联更新

下面的那个查询出来的数据根据ID关联上面的表,我现在要根据ID关联,把下面的数据更新给上面的Gmoney字段,如果用updateset=select这种形式,由于sele... 下面的那个查询出来的数据 根据ID关联上面的表,我现在要根据ID关联,把下面的数据更新给上面的Gmoney字段,如果用update set=select 这种形式,由于select查询出来的是数据集,所以更新失败,我又不想用游标,请问,用函数批处理怎么做? 展开
 我来答
阳光配绿洲
高粉答主

推荐于2019-10-22 · 说的都是干货,快来关注
知道小有建树答主
回答量:552
采纳率:34%
帮助的人:26.4万
展开全部

分析如下

1、【如果存在测试临时表,则先删除,便于重复执行SQL】:

IF OBJECT_ID('tempdb..#SourceTable1') IS NOT NULL DROP TABLE #SourceTable1;

IF OBJECT_ID('tempdb..#SourceTable2') IS NOT NULL DROP TABLE #SourceTable2;

IF OBJECT_ID('tempdb..#UpdateTable') IS NOT NULL DROP TABLE #UpdateTable;

2、【创建源表1】:

CREATE TABLE #SourceTable1(

Id UNIQUEIDENTIFIER,

SCode VARCHAR(50),

SName NVARCHAR(100),

Remark NVARCHAR(500)

)

3、【创建源表2】:

CREATE TABLE #SourceTable2(

Id UNIQUEIDENTIFIER,

SCode VARCHAR(50),

SAttr1 VARCHAR(100),

SAttr2 VARCHAR(100)

)

4、【创建需要更新数据的表】:

CREATE TABLE #UpdateTable(

Id UNIQUEIDENTIFIER,

SCode VARCHAR(50),

SName NVARCHAR(100),

SAttr1 VARCHAR(100),

SAttr2 VARCHAR(100)

)

5、【插入源表1测试数据】:

INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode1', '更新名字1', '更新测试备注1');

INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode2', '更新名字2', '更新测试备注2');

INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode3', '更新名字3', '更新测试备注3');

-- 查询插入的结果

SELECT * FROM #SourceTable1

6、【插入源表2测试数据】:

INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', 'SCode1-更新属性1', 'SCode1-更新属性2');

INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', 'SCode2-更新属性1', 'SCode2-更新属性2');

-- 查询插入的结果

SELECT * FROM #SourceTable2

7、【插入#UpdateTable的原始记录】:

INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', '名字1', 'SCode1-属性1', 'SCode1-属性1');

INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', '名字2', 'SCode2-属性2', 'SCode2-属性2');

INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode3', '名字3', 'SCode3-属性3', 'SCode3-属性3');

-- 查询插入的结果

SELECT * FROM #UpdateTable

8、【使用联合查询,将#UpdateTable、源表1、2中相同SCode的行字段更新到表#UpdateTable】:

UPDATE ut

SET ut.SName = sc1.SName,

ut.SAttr1 = sc2.SAttr1,

ut.SAttr2 = sc2.SAttr2

FROM #UpdateTable ut, #SourceTable1 sc1, #SourceTable2 sc2

WHERE ut.SCode = sc1.SCode

AND ut.SCode = sc2.SCode

-- 查询插入的结果

SELECT * FROM #UpdateTable

扩展资料

SQL Aggregate 函数

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

有用的 Aggregate 函数:

1、AVG() - 返回平均值

2、COUNT() - 返回行数

3、FIRST() - 返回第一个记录的值

4、LAST() - 返回最后一个记录的值

5、MAX() - 返回最大值

6、MIN() - 返回最小值

7、SUM() - 返回总和

SQL Scalar 函数

SQL Scalar 函数基于输入值,返回一个单一的值。

有用的 Scalar 函数:

1、UCASE() - 将某个字段转换为大写

2、LCASE() - 将某个字段转换为小写

3、MID() - 从某个文本字段提取字符

4、LEN() - 返回某个文本字段的长度

5、ROUND() - 对某个数值字段进行指定小数位数的四舍五入

6、NOW() - 返回当前的系统日期和时间

7、FORMAT() - 格式化某个字段的显示方式

参考资料:百度百科 sql的相关函数

akumalzwm
推荐于2017-10-11 · TA获得超过191个赞
知道小有建树答主
回答量:133
采纳率:66%
帮助的人:66.8万
展开全部
UPDATE A
SET A.Gmoney = B.Gmoney
FROM 上表 A
JOIN 关联查出来的表 B ON A.ID = B.ID
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-04-22
展开全部
update table1 set
table1.gmoney = table2.gmoney
from table1,table2
where table1.empid = table2.empid

其中table1为第一个表,table2为第二个表,table2.gmoney为你图中的无列名那一列
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
翼帆
推荐于2018-05-23 · TA获得超过1729个赞
知道小有建树答主
回答量:819
采纳率:60%
帮助的人:591万
展开全部
update 表一 set Gmoney = 表二.列名 from 表一,表二 where 表一.EMPID = 表二.EMPID
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d030d92
推荐于2018-08-07
知道答主
回答量:5
采纳率:100%
帮助的人:5020
展开全部
如果是mysql的话,可以用
update A, B
set A.Gmoney= B.Gmoney
where
A.ID= B.ID
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式