如何在SQLServer2005中使用sql查询更改表中的列顺序?
如何在SQLServer2005中使用SQL查询更改表中的列顺序如何在SQLServer2005中使用sql查询更改表中的列顺序?,sql,sql-server-2005,Sql,Sql Server 2005,如何在SQLServer2005中使用SQL查询更改表中的列顺序 我想使用SQL查询重新排列表中的列顺序。您必须按照希望返回的顺序显式列出字段,而不是使用*作为“默认”顺序 原始查询: select * from foobar 返回 foo bar --- --- 1 2 现在写 select bar, foo from foobar bar foo --- --- 2 1 使用 它显示表的默认列顺序 如果要更改列的顺序 指定要相应显示的列名 SELECT COLUMN1
我想使用SQL查询重新排列表中的列顺序。您必须按照希望返回的顺序显式列出字段,而不是使用*作为“默认”顺序 原始查询:
select * from foobar
返回
foo bar
--- ---
1 2
现在写
select bar, foo from foobar
bar foo
--- ---
2 1
使用
它显示表的默认列顺序
如果要更改列的顺序
指定要相应显示的列名
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
你不能。列顺序只是我们人类关心的一件“装饰性”事情——对于SQL Server来说,它几乎总是完全不相关的 SQL Server Management Studio在后台更改列顺序时所做的是使用新的
CREATE table
命令从头开始重新创建表,从旧表复制数据,然后将其删除
没有SQL命令来定义列顺序。这类似于对查询结果中的记录进行排序的问题。。通常没有人喜欢正式的正确答案;-) 下面是:
- 根据SQL标准,表中的列不是“有序的”
- 因此,
不会强制按特定顺序返回列select*
- 通常,每个RDBMS都有一种“默认”顺序(通常是在
create table'或
alter table add`语句中将列添加到表中的顺序)
- 因此,如果您依赖于列的顺序(因为您使用查询的结果从列的位置倒入一些其他数据结构),请按照您想要的顺序显式列出列
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
- - -
您可以通过创建一个新表,复制所有数据,删除旧表,然后重命名新表以替换旧表来实现 您还可以向表中添加新列,逐列复制数据,删除旧列,然后重命名新列以匹配旧列。下面是一个简单的示例: 据 使用Transact-SQL语句不支持此任务 好的,可以使用
create
/copy/drop
/rename来完成,答案是
也可以使用SQLServerManagementStudio
- Microsoft强烈建议禁用“防止保存需要重新创建表的更改”选项,因为这会导致在重新创建表时删除现有的更改跟踪信息,因此,如果启用了更改跟踪,您应该永远不要禁用此选项!
如果出现上述任何错误,保存将失败,这将使您保留原始列顺序。最后,您无法在MS SQL中执行此操作。我最近在运行中创建了表(应用程序启动)使用从查找表读取的存储过程。当我创建一个视图,将这些视图与之前手动创建的另一个表(相同的模式,带有数据)组合在一起时,它失败了-只是因为我对视图使用了“Select*UNION Select*”。同时,如果我只使用通过存储过程创建的视图,我就成功了
总之:如果有任何应用程序依赖于列的顺序,那么它确实不是很好的编程,并且肯定会在将来产生问题。列应该“感觉”自由地存在于任何地方,并用于任何数据处理(插入、更新、选择).您可以使用索引。.索引后,如果从XXXX中选择*,则结果应与索引一致,但仅与结果集一致。.而不是表的结构。您可以使用SQL查询进行更改。以下是更改列顺序的SQL查询
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
您可以通过以下步骤实现:
如果您的表有足够的列,则可以尝试此操作。首先创建一个具有首选列顺序的新表
create table new as select column1,column2,column3,....columnN from table_name;
现在使用drop命令删除表格
drop table table_name;
现在将新创建的表重命名为旧表名
rename new to table_name;
现在选择表,您可以按照之前的偏好重新排列列
select * from table_name;
更改表名先修改columnname int(5); 将把该列置于第一位
更改表名在(tablename)之后修改columnname int(5);在SQLServer Management Studio中: 工具->选项->设计器->表和数据库设计器
- 取消选择“防止保存需要重新创建表的更改”
- 右键单击
rename new to table_name;
select * from table_name;
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;
BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON 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 GO CREATE TABLE dbo.Tmp_emps ( id int NULL, ename varchar(20) NULL ) ON [PRIMARY] GO ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE) GO IF EXISTS(SELECT * FROM dbo.emps) EXEC('INSERT INTO dbo.Tmp_emps (id, ename) SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)') GO DROP TABLE dbo.emps GO EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT' GO COMMIT
ALTER TABLE tablename DROP COLUMN columnname; ALTER TABLE tablename ADD columnname columntype;
alter table students modify age int(5) first;
+---+---+---+ | A | B | C | +---+---+---+
+---+---+---+---+ | A | B | C | C | +---+---+---+---+ |___^
+---+---+---+---+ | A | B | B | C | +---+---+---+---+ |___^
+---+---+---+---+ | A | D | B | C | +---+---+---+---+
select column1, column2, t.* from table t