关于自动拆分表的问题
关于自动拆分表的问题
问题是这样的:
产品表,字段有产品ID(int),类别ID(int),产品名称(varchar 50)
产品 类别ID 产品名称
-----------------------------------------------
1 10 产品名称1
2 10 产品名称2
3 20 产品名称3
4 20 产品名称4
5 20 产品名称5
...
10000 100 产品名称10000
类别表
类别ID 类别名称
10 主件
20 配件
....
100 零件
现在的要求是:
通过一个存储过程,
将产品表按类别拆分,也就是说如果类别的个数是10,那就生成10个拆分表
类别10
产品 类别ID 产品名称
1 10 产品名称1
2 10 产品名称2
...
类别100
产品 类别ID 产品名称
100 100 产品名称100
102 100 产品名称102
10000 100 产品名称10000
还有如果产品增加了还需要更新update.
现在不知道这个怎么写,多谢大家了!
[解决办法]
--try:
declare @sql varchar(8000)
set @sql= ' '
declare @typeID int
declare c1 cursor for
select 类别ID from 产品表 group by 类别ID
open c1
fetch next from c1 into @typeID
while @@fetch_statu=0
begin
select @sql= 'select * into [型 '+ltrim(@typeID)+ '] from 产品表 where 类别ID= '+ltrim(@typeID)
exec(@sql)
fetch next from c1 into @typeID
end
deallocate c1
close c1
[解决办法]
declare @sql varchar(8000)
declare @类别ID int
declare @类别名称 varchar(20)
declare cur_tmp cursor for
select t.类别ID,类别表.类别名称 from (select distinct 类别ID from 产品表)t,类别表 where t.类别ID=类别表.类别ID
open cur_tmp
fetch next from cur_tmp into @类别ID,@类别名称
while @@fetch_status=0
begin
select @sql= 'select * into '+@类别名称+ ' from 产品表 where 类别ID= '+rtrim(@类别ID)
exec(@sql)
fetch next from cur_tmp into @类别ID,@类别名称
end
close cur_tmp
deallocate cur_tmp
[解决办法]
--如果量小於40,可以不用游,直接用段代
Create ProceDure SP_TEST
As
Begin
Declare @S Varchar(8000)
Select @S = ' '
Select @S = @S + ' Select * Into 类别 ' + Rtrim(类别ID) + ' From 产品表 Where 类别ID = ' + Rtrim(类别ID) + ' ; '
From 类别表 Order By 类别ID
EXEC(@S)
Print @S
End
GO
EXEC SP_TEST
[解决办法]
Create Table 产品表
(产品IDint,
类别IDint,
产品名称 varchar(50))
Insert 产品表 Select 1, 10, N '产品名称1 '
Union All Select 2, 10, N '产品名称2 '
Union All Select 3, 20, N '产品名称3 '
Union All Select 4, 20, N '产品名称4 '
Union All Select 5, 20, N '产品名称5 '
Union All Select 6, 30, N '产品名称6 '
Union All Select 7, 50, N '产品名称7 '
Union All Select 10000, 100, N '产品名称10000 '
Create Table 类别表
(类别ID Int,
类别名称 Nvarchar(10))
Insert 类别表 Select 10, N '主件 '
Union All Select 20, N '配件 '
Union All Select 30, N 'AA '
Union All Select 50, N 'BB '
Union All Select 100, N '零件 '
declare hcforeach cursor global
for
select 'select b.* into 类别 '+rtrim(类别ID)+ ' from 类别表 a join 产品表 b on b.类别ID=a.类别ID where a.类别ID= '+quotename(类别ID, ' ' ' ')
from 类别表
where not exists(select 1 from sysobjects where name= '类别 '+rtrim(类别ID))
group by 类别ID
exec sp_msforeach_worker '? '
select * from sysobjects where name like '类别% '