首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于自动拆分表的有关问题

2012-03-09 
关于自动拆分表的问题关于自动拆分表的问题问题是这样的:产品表,字段有产品ID(int),类别ID(int),产品名称(

关于自动拆分表的问题
关于自动拆分表的问题    
问题是这样的:    
产品表,字段有产品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 '类别% '


热点排行