select * in t-sql确定性吗?

时间:2013-07-18 18:47:38

标签: tsql deterministic non-deterministic

具体来说,我需要知道查询是否

select * from [some_table]

将始终以相同的顺序返回列。

我没有看到任何迹象表明它不具有确定性,但由于我的应用程序的规格,我不能认为这是真的。 任何人都可以用文件的方式指出我吗? 我的搜索没有运气。

提前致谢。

3 个答案:

答案 0 :(得分:0)

SELECT * FROM [some_table]

在同一个DB中始终返回相同的列顺序。

N.B。 我假设你有两个dbs 第一个DB命名为DBA 第二个DB名为DBB

在任一DB中都存在一个表TRIAL

在DBA中,TRIAL表按以下顺序包含以下字段: id,姓名,姓氏

在DBB中,TRIAL表按以下顺序包含以下字段: id,姓氏,姓名

执行时

SELECT * FROM DBA..TRIAL

你会有id,姓名,姓氏

DBB上的相同查询将导致: id,姓氏,姓名

答案 1 :(得分:0)

使用SELECT *时,将返回a)表格在FROM语句中出现的顺序b)列出现在数据库表格中的顺序。

来自MSDN:“这些列是由表或视图返回的,如FROM子句中指定的那样,以及它们在表或视图中的存在顺序。”

http://msdn.microsoft.com/en-us/library/ms176104.aspx

答案 2 :(得分:0)

只要不修改数据库的模式,它就是确定性的。 下面是一个示例,其中select *将更改字段的顺序而不更改表的实际结构:

Create table AAA
( 
   field1 varchar(10),
   field2 varchar(10),
   field3 varchar(10)
);

select * - > field1 ,field2 ,field3

现在你做

alter table AAA drop column field2;
alter table AAA add field2 varchar(10)

select * - > field1 ,field3 , field2

基本上,我不会指望字段的顺序,并且肯定会在select子句中指定它们。