mssql sqlserver 改变列顺序的方法分享


摘要:
在实际应用中,我们常常遇见这样一个需求,就是当我们向一个已经存在列的表中,插入新列时候,
此时我们希望我们插入的列在我们指定的位置上(或者紧跟其它列名后面),下文将分享如何修改列的排列顺序



列排列顺序的原理:

列排序顺序存放于系统表 sys.column中,如下所示:

 create table A(keyId int,name varchar(10),
 name2 varchar(20),name3 varchar(20))
 go
 
 select 
 column_id as [列顺序],
 * from sys.columns where object_id =object_id('A')
 
 go
 truncate table A
 drop table A
 

改变列顺序的方法,目前只能通过重新建表,来达到改变列顺序的方法,例:
我们需将 name 列同name2列交换顺序,那么我们需要按照我们所需的顺序对表进行重新建表。
例:

 
  CREATE TABLE dbo.Tmp_A
	(
	keyId int NULL,
	name2 varchar(20) NULL,
	name varchar(10) NULL,
	name3 varchar(20) NULL
	)   

	/*
	插入数据
	*/
go
ALTER TABLE dbo.Tmp_A SET (LOCK_ESCALATION = TABLE)

go
----生成临时表数据
IF EXISTS(SELECT * FROM dbo.A)
	 EXEC('INSERT INTO dbo.Tmp_A (keyId, name, name2, name3)
		SELECT keyId, name, name2, name3 FROM dbo.A WITH (HOLDLOCK TABLOCKX)')

go
DROP TABLE dbo.A

go
EXECUTE sp_rename N'dbo.Tmp_A', N'A', 'OBJECT' 

go