【问题标题】:ALTER TABLE my_table ADD COLUMN column_name VARCHAR(50) AFTER col_name not supported in SQL Server 2000SQL Server 2000 不支持 ALTER TABLE my_table ADD COLUMN column_name VARCHAR(50) AFTER col_name
【发布时间】:2013-03-10 07:15:38
【问题描述】:

我在 SQL Server 2000 中尝试了以下查询,以便在提到的列之后添加一个新列。

alter table abc ADD dad varchar(50) after parentname

但它会抛出以下错误消息

消息 170,第 15 级,状态 1,第 1 行
第 1 行:'after' 附近的语法不正确。

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

【问题讨论】:

  • 你为什么要这样做?在 SQL 中依赖表列的顺序绝不是一个好主意。只需在您的 SELECT / UPDATE 语句中明确提及它们即可。
  • @Frank Schmitt :我想选择所有列并将其存储在字符串数组中,除了前两列。因此,排除前 2 个索引列将使编码更简单。
  • @Frank:一些开发人员(比如我)确实关心视觉列顺序,即保持相似字段彼此相邻,以及一些列在开头,其他列到结尾。使用逻辑有序列表更“漂亮”并且更好。我同意它不应该对一个好的设计产生任何技术差异。

标签: sql sql-server alter-table


【解决方案1】:

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

随便用

ALTER TABLE abc ADD dad varchar(50)

【讨论】:

  • 感谢您的回复.. 但上面的查询将不符合我的要求,因为我希望将新列放在名为 parentname 的列之后
  • 应该不需要列的顺序。如果您想按特定顺序放置表 - 您将不得不使用 SQL Server Management Studio,它会重新创建完整的表(根本不是一个好主意),或者您只需在 T-SQL 中做同样的事情您将创建一个包含所需列的新表,然后从旧表中迁移值并删除旧表(这很复杂,因为它需要您处理所有关系)。
  • 我确实对表中的列进行排序,就像我在类中排序私有/受保护字段和方法一样。没有必要这样做,但我喜欢保持整洁。例如。 PK 总是在前,然后是 FK,然后是描述(名称、序列号等)。
  • 在这种情况下,我认为您将不得不从头开始重新创建表。
【解决方案2】:

简短的回答:表中没有顺序。

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

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

排序由 SELECT 语句强加。

我的建议是停止将精力和时间花在 CREATE TABLE 的简洁性上,而是花在 SELECT 语句上。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多