表table结构如下,有多条记录, beginnum 与endnum的值分别代表起始和终止值,我现在想把此表中所有记录的beginnum 与endnum中间的值分别插入到一个表中,有什么性能高的方法么?我用游标遍历table,然后再用while开insert into,速度超慢..求性能高的方法,谢谢大家
beginnum endnum
112345 113345
248175 248317
-------答案:
set rowcount 10000
select identity(int,0,1) as id into # from sysobjects a,syscolumns b --这句用研究一下
set rowcount 0
insert into 表2
select (a.beginnum+b.id) from 表1 a,# b where a.beginnum+b.id<=b.endnum --这句也要研究一下
drop table #
---------------------------------------------------------类似的问题------------------------------------------------------
--将表某个字符串拆分生成多行数据
--创建测试
create table TableA (col1 varchar(10),col2 varchar(100))
insert into TableA
select 'abc','111,222,333' union all
select 'bcd','222,333'
--想生成这样
/*
col1
col2
abc
111
abc
222
abc
333
bcd
222
bcd
333
*/
---------------------
--测试方法
SELECT TOP 4000
id = identity(int,1,1)
INTO #Temp
FROM syscolumns a, syscolumns b --这里什么意思?
SELECT A.col1, col2 = SUBSTRING(A.col2, B.ID, CHARINDEX(',', A.col2 + ',', B.ID) - B.ID)
FROM TableA A, #Temp B
WHERE SUBSTRING(',' + a.col2, B.id, 1) = ',' --此方法好
order by col1
--测试结果
/*
col1
col2
abc 111
abc 222
abc 333
bcd 222
bcd 333
*/
--删除测试环境
drop table #Temp
drop table TableA