WITH 没有像我预期的那样工作 sqlServer 2012
WITH is not working as I expected sqlServer 2012
我正在将不同的结果放入 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 语句是一个时间结果集,我希望无论我 select 有多少字段,这两个查询都会带来相同的结果,所以为什么会这样?如果我想执行一个更新甚至最糟糕的是,如果我进行删除,我将无法完全确定我是否影响了我想要的行
如果你select top x
没有order by
,结果集是任意返回的。这意味着如果执行两次,您可以获得不同的结果集。由于您稍微更改了查询,因此结果集不同我并不感到惊讶。添加一个 ORDER BY
如果你 SELECT TOP x
我正在将不同的结果放入 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 语句是一个时间结果集,我希望无论我 select 有多少字段,这两个查询都会带来相同的结果,所以为什么会这样?如果我想执行一个更新甚至最糟糕的是,如果我进行删除,我将无法完全确定我是否影响了我想要的行
如果你select top x
没有order by
,结果集是任意返回的。这意味着如果执行两次,您可以获得不同的结果集。由于您稍微更改了查询,因此结果集不同我并不感到惊讶。添加一个 ORDER BY
如果你 SELECT TOP x