怎么样修改表结构,让表中的字段按英文字母的顺序重新排列???

h98458 2007-12-07 11:50:50
比如:
数据表中有字段,原先排列是这样:
B A D C E F

现在要求用SQL修改表结构让它重新排列,按英文字母排,这样:
A B C D E F

大家有没有好的办法?
...全文
550 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
DemonXHunter 2007-12-07
  • 打赏
  • 举报
回复
你可以从管理器中拖动的方式改变顺序,然后看看它产生的SQL是怎么做的

一般来说,企业管理器是按照这个顺序
1.先按照新的列顺序创建一个新表
2.复制数据
3.drop老表
4.重命名新表为老表名称
5. 重新为该表创建索引,约束和触发器等
h98458 2007-12-07
  • 打赏
  • 举报
回复
现在想办法修改syscolumns的colid顺序……
gahade 2007-12-07
  • 打赏
  • 举报
回复

create table tt(C int,A int,B int)

sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE

update syscolumns
set colid=(select count(*) from syscolumns a where a.name<=syscolumns.name and a.id=syscolumns.id)
where id=object_id('tt')

sp_configure 'allow updates',0
RECONFIGURE WITH OVERRIDE

select * from tt
/*
A B C
----------- ----------- -----------

(所影响的行数为 0 行)
*/


--排序的列不能有重复
yesyesyes 2007-12-07
  • 打赏
  • 举报
回复
导入和字段的先后顺序应该是没关系的
出错应该是别的原因
zjcxc 2007-12-07
  • 打赏
  • 举报
回复
企业管理器做的就是我说的: 按照你想要的顺序建立新表, 然后把数据导过去, 用新表代替旧表

不相信的可以在拖动列后, 点第3个按钮(记得是), 查看修改脚本
-狙击手- 2007-12-07
  • 打赏
  • 举报
回复
写一个过程 ,去修改syscolumns表中的coloerder字段
h98458 2007-12-07
  • 打赏
  • 举报
回复
因为我要用OPENROWSET进行数据导入,导入时是按英文字母顺序排序的,和我SQL数据库中表字段的排列顺序不一样,出错
所以现在想把我数据库里所有表的字段全部以英文字母顺序排列
dawugui 2007-12-07
  • 打赏
  • 举报
回复
如果有触发器之类的乱七八糟的东西的话,就用九天兄说的去管理器里面拖动,省事,还不会出错.
fa_ge 2007-12-07
  • 打赏
  • 举报
回复
用代码不好,因为这个表有触发器或约束时,又要重建
fa_ge 2007-12-07
  • 打赏
  • 举报
回复
我记得是可以拖动的,我刚才在企业管理中试了下,完全可以
dawugui 2007-12-07
  • 打赏
  • 举报
回复
象我代码写的那样,先查询出来插入一表,删除原表.
然后查询新表插入原来的表并创建之(名字一样,实际表不存在)
-狙击手- 2007-12-07
  • 打赏
  • 举报
回复
钻石
dawugui 2007-12-07
  • 打赏
  • 举报
回复
select a,b,c,d,e,f into tb2 from tb1
drop table tb1
select * into tb1 from tb2
fa_ge 2007-12-07
  • 打赏
  • 举报
回复
首先是一定可以调序的,在企业管理中,打开表设计可以自己拖动
如果用代吗,不知怎么搞
zjcxc 2007-12-07
  • 打赏
  • 举报
回复
一般来说不应该关心列顺序的, 如果要, 一般也是建立一个视图来处理

如果一定要改表结构, 则没有办法, sql 没有提供改列顺序的方法

可以按照你想要的顺序建立新表, 然后把数据导过去, 用新表代替旧表
kk19840210 2007-12-07
  • 打赏
  • 举报
回复
如果2000的话还可以
但是2005不能直接修改系统表
gahade 2007-12-07
  • 打赏
  • 举报
回复
--只改colid就可以,colorder可不用改
h98458 2007-12-07
  • 打赏
  • 举报
回复
修改syscolumns表中的colid;colorder不需要修改吗?
--------------------
谢谢提醒,想想应该修改,重新修改后程序:


--遍历表
go
sp_configure 'allow updates',1
go
RECONFIGURE WITH OVERRIDE
go
declare @SQL varchar(4000)
declare @TableName varchar(30)
declare sTableName Cursor for select [name] from sysobjects where xtype='u' and name<>'dtproperties'
Open sTableName
fetch next from sTableName into @TableName
while @@fetch_status=0
begin
--更新
set @SQL='update syscolumns set colid=(select count(*) from syscolumns a where a.name<=syscolumns.name and a.id=syscolumns.id),colorder=(select count(*) from syscolumns a where a.name<=syscolumns.name and a.id=syscolumns.id) where id=object_id('''+@TableName+''')'
print(@SQL)
exec(@SQL)
fetch next from sTableName into @TableName
end

close sTableName
deallocate sTableName

go
sp_configure 'allow updates',0
go
RECONFIGURE WITH OVERRIDE
yangjiexi 2007-12-07
  • 打赏
  • 举报
回复
修改syscolumns表中的colid;colorder不需要修改吗?
h98458 2007-12-07
  • 打赏
  • 举报
回复
重新修改一下,修改整个数据库所用户表字段按英文字母排序:

--遍历表
go
sp_configure 'allow updates',1
go
RECONFIGURE WITH OVERRIDE
go
declare @SQL varchar(4000)
declare @TableName varchar(30)
declare sTableName Cursor for select [name] from sysobjects where xtype='u' and name<>'dtproperties'
Open sTableName
fetch next from sTableName into @TableName
while @@fetch_status=0
begin
--更新
set @SQL='update syscolumns set colid=(select count(*) from syscolumns a where a.name<=syscolumns.name and a.id=syscolumns.id) where id=object_id(''cis.'+@TableName+''')'
print(@SQL)
exec(@SQL)
fetch next from sTableName into @TableName
end

close sTableName
deallocate sTableName

go
sp_configure 'allow updates',0
go
RECONFIGURE WITH OVERRIDE
加载更多回复(1)

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧