|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
一个交织表.用字段明做为值:原表数据为:
字段1字段2字段3
A1B1C1
A2B2C2
变更后:
COL1COL2COL3
字段1A1A2
字段2B1B2
字段3C1C2
createtabletablename(字段1varchar(100),字段2varchar(100),字段3varchar(100))
inserttablenameselectgsm900/1800mhz/gprs,85*44*21mm,80
unionallselectgsm900/1800mhz/gprs,82*46*21.5mm,79
go
SELECTtop0
字段名=a.name
intoabc
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=Uandd.name=tablename
orderbya.id,a.colorder
SELECTtop0
note=a.name
intoabcd
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=U--暗示用户范例
andd.name=tablename--必要猎取字段的表
orderbya.id,a.colorder
declare@numint,@Colvarchar(50),@Namevarchar(200),@Name1varchar(200),@countint,@num1varchar(5)
select@num=1
select@count=count(*)fromtablename
while(@count>0)
begin
select@Col=Col+convert(varchar,@num)
exec(ALTERTABLEabcadd[+@Col+]varchar(200)NULL)
select@num=@num+1
set@count=@count-1
end
DECLAREAddNameColumns_CursorINSENSITIVECURSOR--取字段值
FOR
SELECT
filedname=a.name
FROMsyscolumnsa
innerjoinsysobjectsdona.id=d.id
leftjoinsyspropertiesfond.id=f.idandf.smallid=0
whered.xtype=Uandd.name=tablename
orderbya.id,a.colorder
OPENAddNameColumns_Cursor
BEGIN
FETCHNEXTFROMAddNameColumns_CursorINTO@Name--对应响应字段值
WHILE@@FETCH_STATUS=0
BEGIN
insertintoabc(字段名)
selectfname=@Name
deleteabcd
exec(insertintoabcd(note)selectname=[+@Name+]fromtablename)
select@num=1
DECLAREAddNameColumns_Cursor1INSENSITIVECURSOR
FORselectnotefromabcd
OPENAddNameColumns_Cursor1
BEGIN
FETCHNEXTFROMAddNameColumns_Cursor1INTO@Name1
WHILE@@FETCH_STATUS=0
BEGIN
select@num1=convert(varchar,@num)
exec(updateabcset[Col+@num1+]=+@Name1+where字段名=+@Name+)
printupdateabcset[+@Col+]=+@Name1+where字段名=+@Name+
select@num=@num+1
FETCHNEXTFROMAddNameColumns_Cursor1INTO@Name1
END
END
CLOSEAddNameColumns_Cursor1
DEALLOCATEAddNameColumns_Cursor1
FETCHNEXTFROMAddNameColumns_CursorINTO@Name
END
END
CLOSEAddNameColumns_Cursor
DEALLOCATEAddNameColumns_Cursor
select*fromabc
SELECT*FROMtablename
droptabletablename
droptableabc
droptableabcd
从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 |
|