求教sql2000几个问题的解决方法

来源:百度知道 编辑:UC知道 时间:2024/06/30 00:30:19
1:我想建立一个用户名的数据库,然后将他们分几次提取出去,但是不想把1个用户名多次提取,数据一般是用TXT文件导入,然后再导出到EXECL2000中,请问如何再原表中标记出未导出和已导出。
2:建立的用户名数据库如何去重,就是将重复的ID直接再原表中删除
关于问题1的补充,比如说我提取第一次,查询用LIKE="1*"这个命令,查询结果只有“12345”于是只提取:“12345”这个用户名,但是第二次提取时候我表中的数据已经更新仍要用LIKE="1*"这个命令这时候会查询出“12345”,“123”,“1111”这3个用户名,我想请教的是如何将“12345”在第一次查询中做个标记,使他在第二次查询中不会出现。这只是我的一个设想,如果不能实现的话请说,十分感谢。
关于问题2的补充,还是拿刚才的例子,因为我要随时更新,也就是用TXT导入数据,所以有时难免会出现重复的数据,例如,第一次表中已经有了“12345”第二次重复录入了“12345”请问有什么命令可以让系统自动去重,因为要处理10W以上的用户名,排序后一个个的删是不现实的,具体到某一个数据的操作也是不能完成的,也就说这个命令就像EXECL表格中筛选一样,自动去重~~,麻烦大家了

INSERT OldTable SELECT * FROM TempTable A WHERE NOT EXISTS (SELECT * FROM OldTable B WHERE A.USER_ID=B.USER_ID) 是什么意思,没看明白.....

1:如果需要实现你说的效果,需要在源表内添加字段,单独标示更新状态,比如说添加status列,默认值设为0或者false。每次导出时添加条件 status=0 ,导出后运行sql语句,来更新status列为1。
例如:导出LIKE "1*" 的数据时,要把条件设为 like "1*" and status=0
导出后,要运行 update table1 set status=1 where user like "1*"

想要达到导出后全自动实现是不可能的,只能这样手动实现。如果是写程序的话,就可以把导出和更新语句都集成到程序里,实现全自动的效果了。

2:去重的问题复杂一些,需要通过临时表来实现。
步骤1,
把整个用户表导出到一个临时表中,同时添加一个每行唯一的ID,如果表中每行数据都有唯一ID的话,可以省略此步。
SELECT IDENTITY(int, 1,1) AS ID_Num, * INTO NewTable FROM OldTable
步骤2,
删除原表数据。
DELETE FROM OldTable
步骤3,
按照用户名选出一个最小或最大ID,与临时表做合并查询,得到用户唯一数据
INSERT OldTable
SELECT A.USER_ID, A.USER_NAME, A.…… (请自己列出原表中所有字段)
FROM NewTable A
JOIN (SELECT USER_ID, MIN(ID_Num) MIN_ID FROM NewTable GROUP BY USER_ID) B ON A.USER_ID=B.USER_ID AND A.ID_Num=B.MIN_ID
步骤4,
删除临时表
DROP TABLE NewTable

补充:其实按照你说的情况,我建议你在导入时不要直接导入到目的表中,而是应该导入到一张临时表中,然后再向目的表中插