处理sql server数据的经过,又学了一点点!

问题描述如下:
      首先数据库在187上,当前跑的数据库是album,另一个备份数据库是album_back,这个是我防止处理数据出错而把最初整理好的18万条数据放在了里面的cn_crazyasp_album_image_TImage表中,另外2张表一个是preview一个是TAlbum都是空白表.
      说说处理过程,18万条数据分为2类,一类是活动照片记录,类型标记(ownerType)为activity;一类是个人照片记录,类型标记(ownerType)为user.这18万条数据目前不输入任何相册,其albumId都为null(当然在album 库中已有50000条albumId > 0了);
      现在需要的过程是:遍历每条数据,根据这条数据的ownerType和ownerId去建立相册,即给每个活动建立一个默认的相册,放其相关的照片;对每个用户也建立一个默认的相片,存放其原来发的相片;建立好相册,把相册的id,放在这条记录的albumId中来;同时根据此记录中的图片地址url,去生成四张缩略图,同时往preview表里写入四条记录。
      按照我最初的想法,就是写一个方法,配置为webwok的action或spring的定时任务来跑。方法很好写,但问题是处理起来要费好多时间!最后还是我们大哥提议用sql脚本写,直接在查询分析器里执行,当然这样先不考虑缩略图了。大体的sql 语句如下:

/*
select count(*) from cn_crazyasp_album_image_preview_TPreview --401786
select count(*) from cn_crazyasp_album_image_TImage --182030
select count(*) from cn_crazyasp_album_TAlbum --2124
*/
--复制图片对象表,包括数据和表结构
--select * into TImage from cn_crazyasp_album_image_TImage
--14秒

--select top 100 * from TImage
--select top 1 * from cn_crazyasp_album_TAlbum where ownertype='user'

--用户图片总数
--select count(*) from TImage where ownertype='user' --100012

--为所有活动和用户创建对应的相册
---INSERT INTO TAlbum (ownerType,ownerId,authorId) select ownerType,ownerId,authorId from TImage group by ownerType,ownerId,authorId
--23137行记录

--更新图片对象所属的相册的编号
/*
update TImage set TImage.albumId=(select a.id from TAlbum as a
where a.ownerType=TImage.ownerType and a.ownerId=TImage.ownerId and a.authorId=TImage.authorId)
*/



1.-----------------------------------------------
insert into cn_crazyasp_album_image_preview_TPreview(ownerId,url) select a.id,a.url from cn_crazyasp_album_image_TImage as a

2.把url颠倒次序

UPDATE cn_crazyasp_album_image_preview_TPreview
SET url = REVERSE(url)

3.把扩展名都去掉

UPDATE cn_crazyasp_album_image_preview_TPreview
SET url = REPLACE(url, LEFT(url, 4), '')

4.再把url颠倒过来

UPDATE cn_crazyasp_album_image_preview_TPreview
SET url = REVERSE(url)

5.把以下语句执行3次

INSERT INTO cn_crazyasp_album_image_preview_TPreview
      (ownerId, url)
SELECT ownerId, url
FROM cn_crazyasp_album_image_preview_TPreview a
WHERE (id < 182018)
6.
UPDATE cn_crazyasp_album_image_preview_TPreview
SET height = 500, width = 500, type = 'big', nsize = 0
WHERE (id > 546051) AND (id < 728069)
7.为相册建立封面的sql语句
UPDATE cn_crazyasp_album_TAlbum
SET image =
          (SELECT TOP 1 CONVERT(varchar(30), YEAR(m.inTime), 101)
               + '-' + CONVERT(varchar(30), MONTH(m.inTime), 101) + '/' + m.url
         FROM cn_crazyasp_album_image_TImage AS m
         WHERE m.authorId = cn_crazyasp_album_TAlbum.authorId AND
               m.ownerId = cn_crazyasp_album_TAlbum.ownerId
         ORDER BY id DESC)
WHERE (id < 23138)

你可能感兴趣的:(spring,数据结构,sql,SQL Server,活动)