WITH没有像我预期的那样工作sqlServer 2012

时间:2017-04-28 12:13:46

标签: sql-server select sql-server-2012 sql-delete with-statement

我将不同的结果变成了一个WITH语句。这是我的第一个问题:

with q as (select top (100000) * from table1) select * from q

让我们说table1有一个ID字段,如果我执行该查询,一切似乎都正常,它按预期工作。但如果我改变这样的陈述:

with q as (select top (100000) * from table1) select [ID] from q

with q as (select top (100000) * from table1) select q.[ID] from q

它为我带来了第一个查询中不存在的结果(请注意,我只带来ID)。我理解WITH语句是一个时间结果集,我希望无论我选择多少个字段,两个查询都会得到相同的结果,为什么会发生这种情况?如果我想执行更新甚至最差,这可能是一个问题如果我删除了,我将不能完全确定我是否影响了我想要的行

1 个答案:

答案 0 :(得分:4)

如果select top x没有order by,则会随意返回结果集。这意味着如果执行两次,您可以获得不同的结果集。由于您稍微更改了查询,因此结果集不同并不奇怪。如果ORDER BY

,请添加SELECT TOP x