1

我有一个包含 6 列的表MyTable
: 当我写时:select * from MyTable 我得到这个结果

姓名 | LAST_NAME | FIRST_NAME | 年龄 | 工资 | ID


我想要的是更改他们的顺序,我希望 ID 位于第一个而不是 lat

示例:当我编写查询 select * from MyTable 我希望结果是这样的:

身份证 | 姓名 | LAST_NAME | FIRST_NAME | 年龄 | 薪水

我为什么要这个?:这个表有一个过程,它接受我插入的内容,并使用解析器为它们创建另一个查询。
示例:如果我插入 id =1 和 name = stack 和 last_name =over,解析器将以这种方式进行:
插入 mytable 值 (1,'stack','over') (这是一个简单的示例,我的解析器很复杂)
所以你会问自己为什么我首先需要它?
因为我有 20 多个开发人员首先考虑 ID。
当我试图修改列 ID 时,这一切都开始了,所以我不得不删除它并再次重新创建列并添加约束并将 NULL 更改为 NOT NULL,在删除它之前我将数据放在一个临时列中,这样我没有丢失数据。但我没有看到的一件事是列顺序。
好吧,我可以简单地告诉开发人员该更改,但如果我这样做了,我会被问到很多问题,我是如何做到的以及为什么这样做。我不想让任何人知道(如果可能的话)

我想到的解决方案之一是创建一个包含正确行的新表。但是程序、触发器将被删除,我必须为该表再次添加它们,我担心重新创建表时会遇到新问题。

4

1 回答 1

2

不要使用*,按您想要的顺序指定列,例如:

select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY  from MyTable

如果您必须对列重新排序,请创建一个视图:

create view MyView as
  select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY  from MyTable

所以这select * from MyView将返回你想要的。

*只是一个方便的捷径。由于它不是显式的,因此在表中添加或删除列时很容易导致错误。在生产代码中使用它并不好。

不要创建另一个表,这太复杂了。

于 2013-06-13T18:08:49.957 回答