如何使用SQL语句在表中的指定位置插入一个字段

时间:2021-08-14 15:07:25
例如,表原有字段A,B,C,我想在A和B中间插入字段D,如何实现`

11 个解决方案

#1


在企业管理器中,我知道
在设计表时--->选个字段-->右击-->插入列

#2


要指定位置的话,就要先修改系统表,在alter table add ...

#3


在企业管理器中按楼上点灯兄弟的操作方式操作后,点击【保存更改脚本】可以查看后台对这种情况的处理方式:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_TABLE1
(
field1 int NOT NULL IDENTITY (1, 1),
field3 float(53) NULL,
field2 nvarchar(50) NULL
)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TABLE1 ON
GO
IF EXISTS(SELECT * FROM dbo.TABLE1)
 EXEC('INSERT INTO dbo.Tmp_TABLE1 (field1, field2)
SELECT field1, field2 FROM dbo.TABLE1 TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_TABLE1 OFF
GO
DROP TABLE dbo.TABLE1
GO
EXECUTE sp_rename N'dbo.Tmp_TABLE1', N'TABLE1', 'OBJECT'
GO
COMMIT

#4


我说的是使用SQL语句

#5


哦,我试一下

#6


alter table 表名 add [字段名] [字符类型] [长度]  NULL

#7


alter table 只能把列建在表列的最后面
如要实现楼主的要求,需要把表重建,再把数据导入重建的数据表

#8


--我写了一个,不过,碰到null值时就会出现问题。我也搞不懂为什么。希望这个对你有用。
if exists(select* from sysobjects where name='ta' and xtype='U')
 drop table ta
go
create table ta(a int, b int, c int)
go
insert ta select 1, 2, 3
union all select 2, 5, 6
go
alter table ta 
     add d int default 0 not null
 
select* from ta
--修改列的顺序(修改系统配置,使我们可以更新系统表)
exec sp_configure 'allow updates', 1 
RECONFIGURE with override
go

--将d列提前
--先将b列推后
update syscolumns set colid=5
where name='b' 
and id=object_id('ta')

update syscolumns set colid=2
where name='d' 
and id=object_id('ta')

update syscolumns set colid=4
where name='b' 
and id=object_id('ta')
go
exec sp_configure 'allow updates', 0
RECONFIGURE with override
select* from ta

#9


不知道,;有一个思路,能不能引入临时表做为媒介呢,

#10


100MB asp和 asp.net空间 50/1年
我看到了一个网站 100MB asp和 asp.net空间 现在促销,
同学们可以做一个简单的个人网站用来找工作 ,
 支持 asp.net 一年才50元!不要错过哦!!!
速度非常快,一般公司企业 足够用了!
http://www.hi876.com 
希望能对大家有帮助

#11


47522341(睡到8:30)兄的应该就可以的,不妨试一下。

#1


在企业管理器中,我知道
在设计表时--->选个字段-->右击-->插入列

#2


要指定位置的话,就要先修改系统表,在alter table add ...

#3


在企业管理器中按楼上点灯兄弟的操作方式操作后,点击【保存更改脚本】可以查看后台对这种情况的处理方式:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_TABLE1
(
field1 int NOT NULL IDENTITY (1, 1),
field3 float(53) NULL,
field2 nvarchar(50) NULL
)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TABLE1 ON
GO
IF EXISTS(SELECT * FROM dbo.TABLE1)
 EXEC('INSERT INTO dbo.Tmp_TABLE1 (field1, field2)
SELECT field1, field2 FROM dbo.TABLE1 TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_TABLE1 OFF
GO
DROP TABLE dbo.TABLE1
GO
EXECUTE sp_rename N'dbo.Tmp_TABLE1', N'TABLE1', 'OBJECT'
GO
COMMIT

#4


我说的是使用SQL语句

#5


哦,我试一下

#6


alter table 表名 add [字段名] [字符类型] [长度]  NULL

#7


alter table 只能把列建在表列的最后面
如要实现楼主的要求,需要把表重建,再把数据导入重建的数据表

#8


--我写了一个,不过,碰到null值时就会出现问题。我也搞不懂为什么。希望这个对你有用。
if exists(select* from sysobjects where name='ta' and xtype='U')
 drop table ta
go
create table ta(a int, b int, c int)
go
insert ta select 1, 2, 3
union all select 2, 5, 6
go
alter table ta 
     add d int default 0 not null
 
select* from ta
--修改列的顺序(修改系统配置,使我们可以更新系统表)
exec sp_configure 'allow updates', 1 
RECONFIGURE with override
go

--将d列提前
--先将b列推后
update syscolumns set colid=5
where name='b' 
and id=object_id('ta')

update syscolumns set colid=2
where name='d' 
and id=object_id('ta')

update syscolumns set colid=4
where name='b' 
and id=object_id('ta')
go
exec sp_configure 'allow updates', 0
RECONFIGURE with override
select* from ta

#9


不知道,;有一个思路,能不能引入临时表做为媒介呢,

#10


100MB asp和 asp.net空间 50/1年
我看到了一个网站 100MB asp和 asp.net空间 现在促销,
同学们可以做一个简单的个人网站用来找工作 ,
 支持 asp.net 一年才50元!不要错过哦!!!
速度非常快,一般公司企业 足够用了!
http://www.hi876.com 
希望能对大家有帮助

#11


47522341(睡到8:30)兄的应该就可以的,不妨试一下。