我可以依赖sql视图中的字段顺序吗?

时间:2010-11-09 21:00:03

标签: sql

如果我创建一个视图并按照我想要“接收”它们的顺序选择我的字段,我可以完全放心,我可以从我的应用程序中调用“select * from myView”,而不是再次指定所有字段名称在我的选择查询?

我问这个是因为我将整个数据行传递给我的DataModel并通过将属性分配给附加到此数据行的itemarray中的不同索引来构造对象。如果这些字段出现故障,则无法确定我的对象会发生什么。

我知道我不能依赖生活在视图中的命令(之前已被烧毁)。但是我不确定领域的顺序。

很抱歉,如果这是sql noob级别。我们都从它开始。现在,我的应用程序代码中的所有无关字段名称都使得可读性变得有些困难,所以如果我可以安全地返回并用*替换大量语法,那就太棒了。

这些表很小,所以我不担心在单个字段上使用*的含义。我只是想不编写不必要的语法。

4 个答案:

答案 0 :(得分:4)

保证列顺序,行顺序(如您所述)不是。

答案 1 :(得分:2)

如果两者都属实,则可能无法保证或可靠的列顺序

  • 视图定义内部有SELECT *SELECT tableA.*
  • 对相关表格进行任何更改

您需要运行sp_refreshview:有关潜在问题,请参阅此question/answer

当然,如果你在一个视图中有简单的SELECT * FROM table,为什么不只是使用该表并节省一些维护痛苦?

最后,我必须说,不建议使用SELECT * ......: - )

答案 2 :(得分:2)

是的,SQL中保证了从左到右的列排序。事实上,它是用于证明SQL不是真正关系的前三个缺陷之一(例如,见The Importance of Column Names by Hugh Darwen),重复的行和NULL值是另外两个。

答案 3 :(得分:1)

是的,我一直依赖select *按照视图或表格中指定的顺序返回字段。

例如Microsoft SQL - “*指定应返回FROM子句中所有表和视图的所有列。列由表或视图返回,如FROM子句中指定的那样,并且按顺序返回它们存在于表格或视图中。“