SQL Query在SQL Server 2005中的现有列之后添加新列

时间:2011-01-19 06:37:44

标签: sql sql-server sql-server-2005

我需要一个SQL查询,在现有列之后添加一个新列,因此该列将按特定顺序添加。

如果有任何ALTER查询,请建议我。

8 个答案:

答案 0 :(得分:36)

Microsoft SQL(AFAIK)不允许您更改表并在特定列之后添加列。您最好的选择是使用Sql Server Management Studio,或者使用删除和重新添加表,或创建新表并手动移动数据。既不是很优雅。

然而

MySQL确实:

ALTER TABLE mytable
ADD COLUMN  new_column <type>
AFTER       existing_column

答案 1 :(得分:20)

ALTER不会这样做,因为列顺序无关紧要用于存储或查询

如果是SQL Server,则必须使用SSMS表设计器来排列列,然后可以生成一个删除并重新创建表的脚本

2013年6月编辑

在此处链接到我的回答:Performance / Space implications when ordering SQL Server columns?

答案 2 :(得分:14)

这是可能的。

首先,只需按常规方式添加每列(作为最后一列)。

其次,在SQL Server Management Studio进入工具=&gt;选项。

Under&#39; Designers&#39; Tab =&gt; &#39;表和数据库设计师&#39;菜单,取消选中&#39;阻止保存需要重新创建表的更改&#39;。

然后,右键单击您的表格并选择“设计”。 在&#39; Design&#39;模式只需拖动列即可对其进行排序。

别忘了保存。

答案 3 :(得分:3)

如果要更改Sql server中列的顺序,目前没有直接在SQL Server中执行此操作的方法。

查看http://blog.sqlauthority.com/2008/04/08/sql-server-change-order-of-column-in-database-tables/

您可以在编辑表格设计时更改顺序。

答案 4 :(得分:2)

首先通过SSMStudio将新列添加到旧表中。转到数据库&gt;&gt;表&gt;&gt;列。右键单击列并选择 new column 。按照向导。然后创建新表,其中列按所需顺序排列,如下所示:

select * into my_new_table from (
select old_col1, my_new_col, old_col2, old_col3
from my_old_table 
) as A
;

然后根据需要通过SSMStudio重命名表。转到数据库&gt;&gt;表&gt;&gt;选择重命名。

答案 5 :(得分:0)

对于MS SQL Server,ALTER TABLE tablename ADD columnname INT将起作用。当然,使用after命令在MySQL中添加特定列之后的列是不可能的。

答案 6 :(得分:0)

根据我的研究,没有办法完全按照您想要的方式执行此操作。您可以手动重新创建表并复制数据,或者 SSMS 可以(并且将会)为您执行此操作(当您将列拖放到不同的顺序时,它会执行此操作)。 事实上,列的顺序无关紧要...... 作为替代解决方案,您可以按所需顺序选择所需数据。 例如,不要在 select 中使用星号 (*),而是按某种顺序指定列名... 假设 MyTablecol1、col2、col3、colNew 列。

代替:

SELECT * FROM MyTable

您可以使用:

SELECT col1, colNew, col2, col3 FROM MyTable

答案 7 :(得分:-4)

从任何时期选择*都是一个坏主意。 这就是为什么SSMS添加每个字段名称,即使有数百个,而不是select *。无论桌子有多大,它的效率都非常低。如果您不知道这些字段是什么,那么将它们从INFORMATION_SCHEMA数据库中拉出来的效率要高于选择*。

更好的查询是:

SELECT 
 COLUMN_NAME, 
 Case 
  When DATA_TYPE In ('varchar', 'char', 'nchar', 'nvarchar', 'binary') 
  Then convert(varchar(MAX), CHARACTER_MAXIMUM_LENGTH)  
  When DATA_TYPE In ('numeric', 'int', 'smallint', 'bigint', 'tinyint') 
  Then convert(varchar(MAX), NUMERIC_PRECISION) 
  When DATA_TYPE = 'bit' 
  Then convert(varchar(MAX), 1)
  When DATA_TYPE IN ('decimal', 'float') 
  Then convert(varchar(MAX), Concat(Concat(NUMERIC_PRECISION, ', '), NUMERIC_SCALE)) 
  When DATA_TYPE IN ('date', 'datetime', 'smalldatetime', 'time', 'timestamp') 
  Then '' 
 End As DATALEN, 
 DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
Where 
 TABLE_NAME = ''