SQL添加一列能不能为第一列?

时间:2021-07-12 10:07:55
我用alter table test add test1 int null
的方式添加一个字段
可是添加的字段都是在现有字段的后面

24 个解决方案

#1


可以的,但是比较麻烦。
修改syscolumns表中各列的列号,让它们的列号+1,然后把你加入的该列的列号设置为1,就可以了

#2


不能!
除非你重建一个table。

#3


真的有这种必要吗????

#4



alter table employee add test1 int null 
go
sp_configure 'allow updates',1
RECONFIGURE WITH override
go
UPDATE syscolumns SET colid=colid+1
WHERE id=object_id('employee')
update syscolumns set colid=1
where id=object_id('employee') and name='test1'
go
sp_configure 'allow updates',0
RECONFIGURE WITH override 


#5


SQL添加一列能不能为第一列?

插入的该列已经成为第一列了

#6


楼上的做法是很危险的,最好不轻易去修改系统表

#7


引用 5 楼 HEROWANG 的回复:
 

插入的该列已经成为第一列了




好像有错误,消息 259,级别 16,状态 1,第 1 行
不允许对系统目录进行即席更新。

#8


需要这么麻烦吗? 

去企业管理器 --> 右键点你想加字段的表 --> Design表 --> 右键点第一列 --> Insert字段 -->加入你想加的内容-->关闭 ---> 会问你要不要改 ---> 是 ---> OVER.

#9


SQLSERVER2000才支持即席更新

楼主的难道是SQLSERVER2005

#10


1:没必要
2:2000以后的版本是不允许你修改系统表的,所以更没必要.

#11


引用 9 楼 lff642 的回复:
SQLSERVER2000才支持即席更新 

楼主的难道是SQLSERVER2005


我的是2000的。lz的执行顺序贴出来看看

#12




直接在企业管理器里面修改字段的顺序


最好不要修改系统表结构!

#13


原表:
create table Tbb(aa nchar(10) NULL,a int NULL,b varchar(100) NULL)
insert into Tbb select 1,1,1
insert into Tbb select 2,2,2

--增长一列ff,使之位于第一列:
CREATE TABLE dbo.Tmp_Tbb
(
ff nchar(10) NULL,
aa nchar(10) NULL,
a int NULL,
b varchar(100) NULL
)  ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.Tbb)
 EXEC('INSERT INTO dbo.Tmp_Tbb (aa, a, b)
SELECT aa, a, b FROM dbo.Tbb WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Tbb
GO
EXECUTE sp_rename N'dbo.Tmp_Tbb', N'Tbb'
GO

#14


13楼是sql server管理界面执行原理。

#15


为什么一定要在第一列呢?

#16


新建一个临时表,然后再把原表删除再rename临时表就可以了!!

#17


--当一个栏位被删除后,重新建立后,其位置不在原来的地方,如果想恢复该栏位在表中的出现的顺序,需更
--改栏位在syscolumns的colid值,其具体步骤如下:

 create table test_column(a char(1) null,b char(2) null,c char(1) null,d char(2)null)

--栏位被删除前的顺序
select * from test_column
alter table test_column drop column c

--栏位被删除后的顺序

select * from test_column
alter table test_column add c varchar(1) null

--栏位被添加后的顺序
select * from test_column

--更改栏位的顺序:

sp_configure 'allow updates','1'
go
reconfigure with override 

update syscolumns set colid=colid+1 where colid>3 and id=object_id('test_column')
update syscolumns set colid=3 where name='c' and id=object_id('test_column')
sp_configure 'allow updates','0'
go
reconfigure with override 
go

#18


我用的是2000。
遇到这种情况我都是到企业管理器中进行修改。
毕竟这种情况不多,所以懒得考虑太复杂的修改办法!
是不是正是这样的原因,我的技巧不够?

#19


我现在急需要这方面的资料
现在我用sql语句添加了一列值,但是这个值本来显示的位置是13,但是现在它显示在20的这个位置上,我想在修改一下它的显示位置,要改回到13这个位置上去,怎么修改呢?

#20


完全没必要,使用数据的时候,你又不用到DB里面看,使用数据的时候调整好顺序就OK了

#21


我覺得這個修改根本是沒有必要,無意義的。
你只要在前台程序中把這個字段顯示在你想要的列就行了

#22


直接用图形化界面操作不就得了

#23


顺序有那么重要么。


查询和插入的时候指定顺序,这也是规范的写法。

#24


什么需求都有啊  学习了

#1


可以的,但是比较麻烦。
修改syscolumns表中各列的列号,让它们的列号+1,然后把你加入的该列的列号设置为1,就可以了

#2


不能!
除非你重建一个table。

#3


真的有这种必要吗????

#4



alter table employee add test1 int null 
go
sp_configure 'allow updates',1
RECONFIGURE WITH override
go
UPDATE syscolumns SET colid=colid+1
WHERE id=object_id('employee')
update syscolumns set colid=1
where id=object_id('employee') and name='test1'
go
sp_configure 'allow updates',0
RECONFIGURE WITH override 


#5


SQL添加一列能不能为第一列?

插入的该列已经成为第一列了

#6


楼上的做法是很危险的,最好不轻易去修改系统表

#7


引用 5 楼 HEROWANG 的回复:
 

插入的该列已经成为第一列了




好像有错误,消息 259,级别 16,状态 1,第 1 行
不允许对系统目录进行即席更新。

#8


需要这么麻烦吗? 

去企业管理器 --> 右键点你想加字段的表 --> Design表 --> 右键点第一列 --> Insert字段 -->加入你想加的内容-->关闭 ---> 会问你要不要改 ---> 是 ---> OVER.

#9


SQLSERVER2000才支持即席更新

楼主的难道是SQLSERVER2005

#10


1:没必要
2:2000以后的版本是不允许你修改系统表的,所以更没必要.

#11


引用 9 楼 lff642 的回复:
SQLSERVER2000才支持即席更新 

楼主的难道是SQLSERVER2005


我的是2000的。lz的执行顺序贴出来看看

#12




直接在企业管理器里面修改字段的顺序


最好不要修改系统表结构!

#13


原表:
create table Tbb(aa nchar(10) NULL,a int NULL,b varchar(100) NULL)
insert into Tbb select 1,1,1
insert into Tbb select 2,2,2

--增长一列ff,使之位于第一列:
CREATE TABLE dbo.Tmp_Tbb
(
ff nchar(10) NULL,
aa nchar(10) NULL,
a int NULL,
b varchar(100) NULL
)  ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.Tbb)
 EXEC('INSERT INTO dbo.Tmp_Tbb (aa, a, b)
SELECT aa, a, b FROM dbo.Tbb WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Tbb
GO
EXECUTE sp_rename N'dbo.Tmp_Tbb', N'Tbb'
GO

#14


13楼是sql server管理界面执行原理。

#15


为什么一定要在第一列呢?

#16


新建一个临时表,然后再把原表删除再rename临时表就可以了!!

#17


--当一个栏位被删除后,重新建立后,其位置不在原来的地方,如果想恢复该栏位在表中的出现的顺序,需更
--改栏位在syscolumns的colid值,其具体步骤如下:

 create table test_column(a char(1) null,b char(2) null,c char(1) null,d char(2)null)

--栏位被删除前的顺序
select * from test_column
alter table test_column drop column c

--栏位被删除后的顺序

select * from test_column
alter table test_column add c varchar(1) null

--栏位被添加后的顺序
select * from test_column

--更改栏位的顺序:

sp_configure 'allow updates','1'
go
reconfigure with override 

update syscolumns set colid=colid+1 where colid>3 and id=object_id('test_column')
update syscolumns set colid=3 where name='c' and id=object_id('test_column')
sp_configure 'allow updates','0'
go
reconfigure with override 
go

#18


我用的是2000。
遇到这种情况我都是到企业管理器中进行修改。
毕竟这种情况不多,所以懒得考虑太复杂的修改办法!
是不是正是这样的原因,我的技巧不够?

#19


我现在急需要这方面的资料
现在我用sql语句添加了一列值,但是这个值本来显示的位置是13,但是现在它显示在20的这个位置上,我想在修改一下它的显示位置,要改回到13这个位置上去,怎么修改呢?

#20


完全没必要,使用数据的时候,你又不用到DB里面看,使用数据的时候调整好顺序就OK了

#21


我覺得這個修改根本是沒有必要,無意義的。
你只要在前台程序中把這個字段顯示在你想要的列就行了

#22


直接用图形化界面操作不就得了

#23


顺序有那么重要么。


查询和插入的时候指定顺序,这也是规范的写法。

#24


什么需求都有啊  学习了