求助SQL语句:增加一个字段到特定的位置!

时间:2022-08-22 10:54:35
create table a (a varchar(1) null,c varchar(1) null);
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!

12 个解决方案

#1


直接用语句搞不定.
只能将结果插入一新表,删除原始表,然后再从新表创建回来.

select a , b = '...', c into tb2 from tb1
drop table tb1
select * into tb1 from tb2

#2


你可以重新创建一个符合你要求的表啊,如果有数据可以把数据导过去的,

#3


用语句好象实现不了,不过在企业管理器中可以操作.
不过,用语句直接修改系统表是不是可以实现呢?好象以前有贴子讨论过这个问题.

#4


一个语句搞不定,可在企业管理器中修改表,插入字段,再点生成sql语句的按钮,自动生成sql 语句

#5


SQL可以实现添加列到指定位置



--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
GO

CREATE PROC sp_addColumn
@TableName sysname,              --要添加字段的表名
@FieldDefine nvarchar(1000),   --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position   int=-1                --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
           --                             如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END

--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefine

BEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) 
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET 
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO

--关闭系统表写功能
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE

#6


----测试


--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
GO

create   table   a   (a   varchar(1)   null,c   varchar(1)   null); 
go


/*
a      c    
----  ---- 

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

CREATE PROC sp_addColumn
@TableName sysname,              --要添加字段的表名
@FieldDefine nvarchar(1000),   --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position   int=-1                --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
           --                             如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END

--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefine

BEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) 
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET 
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO
---增加新列到2
exec sp_addColumn 'a','b int',2

select * from a
/*

a    b           c    
---- ----------- ---- 

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

--关闭系统表写功能
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE


go 
drop table a
drop proc sp_addColumn

#7


在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。
可任意调整

#8


在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。 
可任意调整

---------------------------

create   table   a   (a   varchar(1)   null,c   varchar(1)   null); 
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!

#9


借问楼上各位高人,这样做的意义是什么,什么场合下需要?

#10


回楼上,现在是在回复楼主提的问题,如果想知道为什么,建议问楼主,嘿嘿

#11


create       table       a       (a       varchar(1)       null,c       varchar(1)       null);   
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!?

-----------
在SQL2005的环境下,在企业管理里有修改,选择生成SQL脚本,就行了。。。
生成脚本也就是用一个事务,用新表得到旧表数据,重命名表。。。

#12


哦来哦来

#1


直接用语句搞不定.
只能将结果插入一新表,删除原始表,然后再从新表创建回来.

select a , b = '...', c into tb2 from tb1
drop table tb1
select * into tb1 from tb2

#2


你可以重新创建一个符合你要求的表啊,如果有数据可以把数据导过去的,

#3


用语句好象实现不了,不过在企业管理器中可以操作.
不过,用语句直接修改系统表是不是可以实现呢?好象以前有贴子讨论过这个问题.

#4


一个语句搞不定,可在企业管理器中修改表,插入字段,再点生成sql语句的按钮,自动生成sql 语句

#5


SQL可以实现添加列到指定位置



--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
GO

CREATE PROC sp_addColumn
@TableName sysname,              --要添加字段的表名
@FieldDefine nvarchar(1000),   --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position   int=-1                --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
           --                             如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END

--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefine

BEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) 
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET 
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO

--关闭系统表写功能
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE

#6


----测试


--开启系统表写功能以便创建存储过程
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE
GO

create   table   a   (a   varchar(1)   null,c   varchar(1)   null); 
go


/*
a      c    
----  ---- 

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

CREATE PROC sp_addColumn
@TableName sysname,              --要添加字段的表名
@FieldDefine nvarchar(1000),   --要添加的列的定义,定义必须符合ALTER TABLE tbname ADD规范
@Position   int=-1                --添加列位置,其值为1~表的总列数,比如1,表示添加为第1列,
           --                             如果@Position无效,则仅添加列
AS
IF ISNULL(OBJECTPROPERTY(OBJECT_ID(@TableName),'IsUserTable'),0)=0
BEGIN
RAISERROR(N'无效的表名 "%s"',12,16,@TableName)
return
END

--添加字段
DECLARE @s nvarchar(4000)
SET @s=N'ALTER TABLE '+QUOTENAME(@TableName)+N' ADD '+@FieldDefine

BEGIN TRAN
EXEC sp_executesql @s
IF @@ERROR=0
BEGIN
DECLARE @maxcolid int
SELECT @Position=ISNULL(@Position,0),@maxcolid=MAX(colid) 
FROM syscolumns
WHERE id=OBJECT_ID(@TableName)
IF @Position>0 AND @Position<@maxcolid
UPDATE syscolumns SET 
colid=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END,
colorder=CASE colid WHEN @maxcolid THEN @Position ELSE colid+1 END
WHERE id=OBJECT_ID(@TableName)
AND colid>=@Position
COMMIT TRAN
END
ELSE
ROLLBACK TRAN
GO
---增加新列到2
exec sp_addColumn 'a','b int',2

select * from a
/*

a    b           c    
---- ----------- ---- 

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

--关闭系统表写功能
EXEC sp_configure 'allow updates',1 
RECONFIGURE WITH OVERRIDE


go 
drop table a
drop proc sp_addColumn

#7


在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。
可任意调整

#8


在企业管理器里—数据库—表—右健—设计表—在a列和C列—右健插入B列。。 
可任意调整

---------------------------

create   table   a   (a   varchar(1)   null,c   varchar(1)   null); 
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!

#9


借问楼上各位高人,这样做的意义是什么,什么场合下需要?

#10


回楼上,现在是在回复楼主提的问题,如果想知道为什么,建议问楼主,嘿嘿

#11


create       table       a       (a       varchar(1)       null,c       varchar(1)       null);   
怎么才能在字段c前面增加一个字段b,SQL语句怎么写!谢了!?

-----------
在SQL2005的环境下,在企业管理里有修改,选择生成SQL脚本,就行了。。。
生成脚本也就是用一个事务,用新表得到旧表数据,重命名表。。。

#12


哦来哦来