Him*_*dri 95 sql sql-server-2005
如何在SQL Server 2005中使用SQL查询更改表中的列顺序?
我想使用SQL查询重新排列表中的列顺序.
mar*_*c_s 96
你不能.列顺序只是我们人类关心的"整容"事物 - 对于SQL Server来说,它几乎总是绝对无关紧要.
当您更改列顺序时,SQL Server Management Studio在后台执行的操作是使用新CREATE TABLE
命令从头开始重新创建表,从旧表复制数据,然后删除它.
没有用于定义列排序的SQL命令.
lex*_*exu 26
您必须按照希望返回的顺序显式列出字段,而不是使用*作为"默认"顺序.
原始查询:
select * from foobar
Run Code Online (Sandbox Code Playgroud)
回报
foo bar
--- ---
1 2
Run Code Online (Sandbox Code Playgroud)
现在写
select bar, foo from foobar
bar foo
--- ---
2 1
Run Code Online (Sandbox Code Playgroud)
rob*_*tik 21
根据http://msdn.microsoft.com/en-us/library/aa337556.aspx
无法使用Transact-SQL语句执行此任务.
好吧,它可以是,使用create
/ copy/drop
/ rename,由komma8.komma1回答
或者您可以使用SQL Server Management Studio
- 在对象资源管理器中,右键单击包含要重新排序的列的表,然后单击" 设计"(在2005 SP1或更早版本中修改)
- 选择要重新排序的列名称左侧的框.(您可以通过按住键盘上的[shift]或[ctrl]键来选择多个列.)
- 将列拖动到表中的其他位置.
然后单击"保存" 此方法实际上会删除并重新创建表,因此可能会发生一些错误.
如果为数据库和表启用了" 更改跟踪"选项,则不应使用此方法.
如果禁用,则应在"工具"菜单>"选项">"设计器"中清除" 需要重新创建表格的防止保存更改"选项,否则将出现"不允许保存更改"错误.
在创建主键和外键时也可能出现问题.
如果出现上述任何错误,保存将失败,从而使您保留原始列顺序.
Tho*_*ten 12
这类似于在查询结果中排序记录的问题..通常没有人喜欢正式的正确答案;-)
所以这里:
select *
不会强制按特定顺序返回列create table' or in the
alter table中添加`语句mev*_*ven 11
您当然可以在sql语句中更改列的顺序.但是,如果要抽象表的物理列顺序,则可以创建视图.即
CREATE TABLE myTable(
a int NULL,
b varchar(50) NULL,
c datetime NULL
);
CREATE VIEW vw_myTable
AS
SELECT c, a, b
FROM myTable;
select * from myTable;
a b c
- - -
select * from vw_myTable
c a b
- - -
Run Code Online (Sandbox Code Playgroud)
您可以通过创建新表,复制所有数据,删除旧表,然后重命名新表以替换旧表来完成.
您还可以向表中添加新列,按列数据复制列,删除旧列,然后重命名新列以匹配旧列.下面是一个简单的例子:http: //sqlfiddle.com/#!3/67af4/1
CREATE TABLE TestTable (
Column1 INT,
Column2 VARCHAR(255)
);
GO
insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO
select * from TestTable;
GO
ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO
update TestTable
set Column1_NEW = Column1,
Column2_NEW = Column2;
GO
ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO
sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO
select * from TestTable;
GO
Run Code Online (Sandbox Code Playgroud)
小智 6
在SQLServer Management Studio中:
工具 - >选项 - >设计师 - >表和数据库设计师
然后:
SQLServer Management studio将删除表并使用数据重新创建它.
小智 6
在 SQLServer 管理工作室中:
Tools
-> Options
-> Designers
->Table and Database Designers
取消选择Prevent saving changes that require table re-creation
。
现在您可以对表重新排序。