2013-03-10 34 views
4

我在SQL Server 2000中尝试了以下查询,以便可以在提到的列后面添加一个新列。ALTER TABLE my_table添加列column_name VARCHAR(50)AFTER在SQL Server 2000中不支持col_name

alter table abc ADD dad varchar(50) after parentname 

但它抛出我下面的错误消息

消息170,级别15,状态1,行1
第1行: '后' 附近有语法错误。

有没有办法在SQL Server 2000中做到这一点?

+1

为什么你想这样做?依赖SQL中表列的顺序决不是一个好主意。只需在您的SELECT/UPDATE语句中明确提及它们。 – 2013-03-10 07:42:55

+0

@Frank Schmitt:我想选择所有列并将其存储在除前两列外的字符串数组中。所以排除前两个索引列将使编码更加简单。 – Brainser 2013-03-11 06:29:42

+0

@Frank:一些开发人员(像我一样)关心视觉列顺序,使相似的字段彼此相邻,并且一些列在开头,另一些列在最后。使用逻辑有序列表更加“美观”而且更好。我同意在一个好的设计中不应该有任何技术上的差异。 – Bigjim 2014-05-26 09:33:50

回答

9

在SQL Server中没有这样的语法。

只需使用

ALTER TABLE abc ADD dad varchar(50) 
+0

谢谢你的回应..但上面的查询将不符合我的要求,因为我想新的列放在名为父母名称列后 – Brainser 2013-03-10 07:26:11

+2

应该不需要列的顺序。如果你想按特定顺序放置表 - 你将不得不使用SQL Server Management Studio,它会重新创建完整的表(不是一个好主意),或者你只需​​要在T-SQL中做同样的事情您将创建一个包含所需列的新表,然后从旧表迁移值并删除旧表(这很复杂,因为它需要您处理所有关系)。 – pinaldave 2013-03-10 07:32:42

+0

我的确在我的表格中排列了我的私人/保护字段和方法。没有必要这样做,但我喜欢保持整洁。例如。首先是PK,然后是FK,然后是描述(名称,序列号等)。 – alzaimar 2013-03-10 09:20:01

6

简短的回答:有一个表中没有订单。

表是记录的集合(无序集合),每个记录都是一组字段。这就是为什么RDBMS理论更喜欢单词“记录”和“字段”而不是“行”和“列”。

如果您查看一页数据(例如,通过在MSSQL中使用DBCC PAGE),您将看到字段的存储顺序与您在CREATE TABLE语句中指定的顺序不对应。

排序是由SELECT语句施加的。

我的建议是停止在CREATE TABLE的整洁度上花费精力和时间,并将其花费在SELECT语句上。