在 SQL Server 2005 之前,开发人员使用“选择前 100%”技巧来启用订单视图定义中的 by 子句。然而,除了这个目的之外,今天继承的一些代码仍然在 ASP.NET 应用程序的 ADO 中使用的动态 SQL 语句中包含“选择前 100%”。
问题:是否有使用“的理由”在这些场景中“前 100%”?
答案:中级物化
根据 Adam Machanic 等专家的说法,“选择前 100%”用于“中级物化”。原因如下:
在 SQL Server 中,可以根据情况以不同的顺序评估查询。例如,由于计算顺序不明确,以下两个查询可能会产生不同的结果:
SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100 SELECT foo FROM (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar WHERE CAST(foo AS int) > 100
但是,在 SQL Server 2005 之前,将内部查询括在“Select Top 100 Percent”中会强制使用内部查询被假脱机处理,从而产生一致的评估顺序:
SELECT foo FROM (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar WHERE CAST(foo AS int) > 100
警告注意
虽然这种技术在过去是可以接受的,但通常建议避免在动态 SQL 中使用“选择前 100%”。由于补丁级别、架构、索引或行计数的变化,结果可能不一致。
以上是为什么在 SQL 查询中使用'SELECT TOP 100 PERCENT”?的详细内容。更多信息请关注PHP中文网其他相关文章!