日期:2014-05-18  浏览次数:20715 次

如何向表中添加一列,并指定这一列的位置
表结构如下:
CREATE TABLE [T_MATERIA_HIS] (
[id] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[mid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[contractno] [varchar] (20) COLLATE Chinese_PRC_CI_AS ,
[step] [int] ,
[customerid] [varchar] (10) COLLATE Chinese_PRC_CI_AS ,
[amount] [decimal] (8,2) NOT NULL ,
[money] [decimal] (8,2) NOT NULL ,
[tmoney] [decimal] (12,2) ,
[inoutflag] [varchar] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[warehouse] [varchar] (10) COLLATE Chinese_PRC_CI_AS ,
[resp] [varchar] (7) COLLATE Chinese_PRC_CI_AS ,
[ad] [varchar] (1) COLLATE Chinese_PRC_CI_AS ,
[procdatetime] [datetime] NOT NULL ,
[procer] [varchar] (7) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[addatetime] [datetime] ,
[ader] [varchar] (7) COLLATE Chinese_PRC_CI_AS ,
[memo] [varchar] (80) COLLATE Chinese_PRC_CI_AS ,
[auditremark] [varchar] (120) COLLATE Chinese_PRC_CI_AS ,
[updatetime] [datetime] NOT NULL ,
[updateuser] [varchar] (7) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[lastchanged] [timestamp] NOT NULL ,
CONSTRAINT [PK_T_MATERIA_HIS] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
现在我想在列[customerid]之后插入一列provider varchar(10)
但是我用SQL语句
alter table T_MATERIA_HIS
add provider varchar(10) 插入列provider 之后,它却列在表的最后一列。
请问应如何修改上面的SQL语句,使列provider 插入列[customerid]之后?

------解决方案--------------------
为什么不能用可视化方法呢?
好像写语句的话会在最后添加
------解决方案--------------------
把位於[customerid]之後的先刪除,添加provider varchar(10) 
然後再把後面的補上
------解决方案--------------------
Alter table 
指定列位置是不行的吧,也没必要阿
------解决方案--------------------
探讨
把位於[customerid]之後的先刪除,添加provider varchar(10)
然後再把後面的補上

------解决方案--------------------
事件探查器跟踪结果:
1.新建临时表.
CREATE TABLE [TMP_T_MATERIA_HIS] ( 
[id] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[mid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[contractno] [varchar] (20) COLLATE Chinese_PRC_CI_AS , 
[step] [int] , 
[provider] [varchar] (10) COLLATE Chinese_PRC_CI_AS ,
[customerid] [varchar] (10) COLLATE Chinese_PRC_CI_AS , 
[amount] [decimal] (8,2) NOT NULL , 
[money] [decimal] (8,2) NOT NULL , 
[tmoney] [decimal] (12,2) , 
[inoutflag] [varchar] (1) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[warehouse] [varchar] (10) COLLATE Chinese_PRC_CI_AS , 
[resp] [varchar] (7) COLLATE Chinese_PRC_CI_AS , 
[ad] [varchar] (1) COLLATE Chinese_PRC_CI_AS , 
[procdatetime] [datetime] NOT NULL , 
[procer] [varchar] (7) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[addatetime] [datetime] , 
[ader] [varchar] (7) COLLATE Chinese_PRC_CI_AS , 
[memo] [varchar] (80) COLLATE Chinese_PRC_CI_AS , 
[auditremark] [varchar] (120) COLLATE Chinese_PRC_CI_AS , 
[updatetime] [datetime] NOT NULL , 
[updateuser] [varchar] (7) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[lastchanged] [timestamp] NOT NULL , 
CONSTRAINT [PK_T_MATERIA_HIS] PRIMARY KEY CLUSTERED 

[id] 
) ON [PRIMARY] 
) ON [PRIMARY] 
2.把旧表T_MATERIA_HIS的数据导入临时表TMP_T_MATERIA_HIS
3.drop table T_MATERIA_HIS
4.重命名临时表sp_rename
------解决方案--------------------
用语句实现的话,相当麻烦,还是劝你要么用鼠标健盘,要么不要管列序.

比如给 tb 表加一列z 使它在 b 列前面, 用语句的话

1,先使用alter table add column语句增加 z 列.
2,需要查系统表syscolumns找到 b 列,记下colid 设为 @currentColId