2009-07-19 105 views
2

之前添加COLUMN2我有3个colums(列1,列2,栏3)表结构,我想提出的另一列中包含SQL语句:COLUMN1

alter table tbl_name add column4 

,但我需要把它列1和列2之间

我可以做这样的事情在MYSQL:

alter table tbl_name add column4 after column1 
+1

您可以在SQL管理工作室打开表并更改列的顺序,但基本上是SQL Server不在后台将创建一个包含所需列的新表,将数据从旧表移动到新表,然后删除旧表。 – 2009-07-19 15:26:53

+0

我看到我对这个问题没有别的选择 – Sasha 2009-07-19 15:55:06

回答

1

我不认为SQL Server允许你做这样的事情。如果您想在中间放置一列,则需要创建一个具有所需布局的新表格,迁移数据,删除旧表格并重命名新表格。

+0

奇怪的是,MS SQL不支持这个简单的想法:( – Sasha 2009-07-19 14:57:35

+1

SQL表应该不依赖或依赖于字段的顺序,它真的不是应该在世界关系的元组。 – 2009-07-19 15:25:58

1

@bdukes是正确的。这基本上就是SSMS在你在表格的最后位置以外的任何地方添加一列时所做的。但是,您可以使用视图实现类似的功能。也就是说,只需将您的列添加到表格末尾,然后创建具有不同顺序列的视图。使用视图而不是实际的表格。我只提供这个作为替代方案,可以在某些情况下有用。我不一定会为你的情况推荐它。通常,我使用SSMS中的设计器,并且在插入列时更新表格时没有任何问题。备份当然是你的朋友!

1

一个更根本的问题是,你为什么要这么做?除了SQL企业管理器中默认显示的列以外,列的顺序是不相关的。无论数据库中的列是如何“本地”排序的,您都可以通过任意方式对SQL查询输出的列进行排序。实际上,从学术的角度来看,RDBMS“关系”(表格的学术名称)的主要属性之一是关系的'属性'(列)是无序的。

这是不是说想“默认”为了某种方式是不是有足够的理由......我经常删除并重新正是出于这个原因,表...但是,仅仅理解的顺序并不为了其他任何事情。

1

在SQL Server 2005中可以保存的表的变化改变剧本,所以比如我创建了一个测试表,与COL1,COL2和COL3。然后在col1和col2之间添加col4。我保存了更改脚本,这就是它生成的内容。

看一看

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/ 
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_zzzzzzzz 
    (
    col1 nchar(10) NULL, 
    col4 nchar(10) NULL, 
    col2 nchar(10) NULL, 
    col3 nchar(10) NULL 
    ) ON [PRIMARY] 
GO 
IF EXISTS(SELECT * FROM dbo.zzzzzzzz) 
    EXEC('INSERT INTO dbo.Tmp_zzzzzzzz (col1, col2, col3) 
     SELECT col1, col2, col3 FROM dbo.zzzzzzzz WITH (HOLDLOCK TABLOCKX)') 
GO 
DROP TABLE dbo.zzzzzzzz 
GO 
EXECUTE sp_rename N'dbo.Tmp_zzzzzzzz', N'zzzzzzzz', 'OBJECT' 
GO 
COMMIT 

好像是没有办法简单地添加列。此外,请注意交易,这将删除原始表,所以这是很好的使用事务

相关问题