关于数据的覆盖和追加问题,请不要混分数

wl_zero 2010-05-27 06:01:04
tab1的数据:
s1 s2 s3
1 1 a
2 2 b
3 3 c
2 3 c

tab2的数据:
s1 s2 s3
1 1 a
2 2 b
3 3 q
2 3 4


s1 s2是主键
要求将table1中有,table2中没有的数据添加到table2 ,table1中有且table2中有,但s3字段里面的值不一样的数据覆盖table2中相对应的记录
如:

从table1中查询并得到结果 3 3 c , 2 3 c 操作table2后结果为:

tab2的数据:
s1 s2 s3
1 1 a
2 2 b
3 3 c
2 3 4
2 3 c

涉及应用数据覆盖和追加 ,如果字段超过100个,数据量超过5万条,该如何做?
...全文
219 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2010-05-30
  • 打赏
  • 举报
回复
 除了一楼的方法之外,应该没有什么其它的好办法了。
fengxingphp 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 htl258 的回复:]
楼主给的结果似乎不对,如果是SQL2008,参考这种方式试试:


SQL code
--> 生成测试数据表: [t1]
IF OBJECT_ID('[t1]') IS NOT NULL
DROP TABLE [t1]
GO
CREATE TABLE [t1] ([s1] [int],[s2] [int],[s3] [nvarchar](10))
INSERT INTO ……
[/Quote]
wl_zero 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 acmain_chm 的回复:]
 除了一楼的方法之外,应该没有什么其它的好办法了。
[/Quote]
实际应用中这种追加覆盖,且不影响原来的数据应该应用的比较多额·
htl258_Tony 2010-05-30
  • 打赏
  • 举报
回复
楼主给的结果似乎不对,如果是SQL2008,参考这种方式试试:

--> 生成测试数据表: [t1]
IF OBJECT_ID('[t1]') IS NOT NULL
DROP TABLE [t1]
GO
CREATE TABLE [t1] ([s1] [int],[s2] [int],[s3] [nvarchar](10))
INSERT INTO [t1]
SELECT '1','1','a' UNION ALL
SELECT '2','2','b' UNION ALL
SELECT '3','3','c' UNION ALL
SELECT '2','3','c'

--> 生成测试数据表: [t2]
IF OBJECT_ID('[t2]') IS NOT NULL
DROP TABLE [t2]
GO
CREATE TABLE [t2] ([s1] [int],[s2] [int],[s3] [nvarchar](10))
INSERT INTO [t2]
SELECT '1','1','a' UNION ALL
SELECT '2','2','b' UNION ALL
SELECT '3','3','q' UNION ALL
SELECT '2','3','4'

-->SQL2008查询如下:
MERGE t2 USING t1 ON t1.s1=t2.s1 AND t1.s2=t2.s2
WHEN matched THEN UPDATE SET t2.s3 =t1.s3
WHEN NOT MATCHED THEN INSERT VALUES(t1.s1, t1.s2, t1.s3);

SELECT * FROM t2
/*
s1 s2 s3
----------- ----------- ----------
1 1 a
2 2 b
3 3 c
2 3 c

(4 行受影响)
*/
wl_zero 2010-05-29
  • 打赏
  • 举报
回复
1楼的方法以前用过,在进行大量数据处理的时候,不知道为什么总造成数据丢失
永生天地 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xys_777 的回复:]
要是考虑到速度,你就选择bcp或者BULK INSERT
[/Quote]
只是insert部分,update还是要1楼那样
永生天地 2010-05-28
  • 打赏
  • 举报
回复
要是考虑到速度,你就选择bcp或者BULK INSERT

wl_zero 2010-05-28
  • 打赏
  • 举报
回复
没别的方法了·?
wl_zero 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 haiwer 的回复:]
引用楼主 wl_zero 的回复:
涉及应用数据覆盖和追加 ,如果字段超过100个,数据量超过5万条,该如何做?


一样做法,只是字段数增加
[/Quote]
这样做有测试过数据处理的速度吗·?
昵称被占用了 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 wl_zero 的回复:]
涉及应用数据覆盖和追加 ,如果字段超过100个,数据量超过5万条,该如何做?
[/Quote]

一样做法,只是字段数增加
昵称被占用了 2010-05-27
  • 打赏
  • 举报
回复
update table2 set 
s3 = table1.s3
from table1
where table1.s1=table2.s1
and table1.s2=table2.s2

insert table2(s1,s2,s3)
select s1,s2,s3
from table1
where not exists (
select 1 from table2
where table1.s1=table2.s1
and table1.s2=table2.s2
)

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧