Ed *_*bor 80 sql t-sql sql-server
据我所知,在SQL Server 2005之前,您可以"欺骗"SQL Server以允许在视图定义中使用顺序,也包括TOP 100 PERCENT
在SELECT子句中.但是我已经看到了我继承的其他代码,它们SELECT TOP 100 PERCENT
在动态SQL语句中使用...(在 ASP.NET应用程序中用于ADO等).这有什么理由吗?结果不一样,不包括?TOP 100 PERCENT
gbn*_*gbn 51
它被用于" 中间物化(谷歌搜索) "
他甚至提出了MS Connect,因此可以更清洁的方式完成
我的观点是"本身并不坏",但除非100%肯定,否则不要使用它.问题是,它只在您执行时才有效,可能不会更晚(补丁级别,架构,索引,行数等)...
这可能会失败,因为您不知道评估事物的顺序
SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100
Run Code Online (Sandbox Code Playgroud)
这可能也会失败,因为
SELECT foo
FROM
(SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar
WHERE
CAST(foo AS int) > 100
Run Code Online (Sandbox Code Playgroud)
但是,这在SQL Server 2000中没有.内部查询被评估和假脱机:
SELECT foo
FROM
(SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
CAST(foo AS int) > 100
Run Code Online (Sandbox Code Playgroud)
请注意,这仍然适用于SQL Server 2005
SELECT TOP 2000000000 ... ORDER BY...
Run Code Online (Sandbox Code Playgroud)
Ste*_*ass 39
TOP(100)PERCENT在SQL Server的最新版本中完全没有意义,查询处理器会忽略它(以及在视图定义或派生表的情况下相应的ORDER BY).
你是对的,从前,它可以作为一种技巧,但即便如此,它也不可靠.可悲的是,微软的一些图形工具将这个毫无意义的条款纳入其中.
至于为什么这可能出现在动态SQL中,我不知道.你没有理由这是正确的,如果没有它,结果是一样的(同样,在视图定义或派生表的情况下,没有TOP和ORDER BY子句).
OMG*_*ies 23
...允许在视图定义中使用ORDER BY.
那不是个好主意.视图永远不应该定义ORDER BY.
ORDER BY会对性能产生影响 - 使用视图意味着ORDER BY将在解释计划中出现.如果您有一个查询,其中视图连接到立即查询中的任何内容,或者在内联视图中引用(CTE /子查询因子分析) - ORDER BY始终在最终ORDER BY之前运行(假设已定义).当查询未使用TOP(或LIMIT for MySQL/Postgres)时,排序不是最终结果集的行没有任何好处.
考虑:
CREATE VIEW my_view AS
SELECT i.item_id,
i.item_description,
it.item_type_description
FROM ITEMS i
JOIN ITEM_TYPES it ON it.item_type_id = i.item_type_id
ORDER BY i.item_description
Run Code Online (Sandbox Code Playgroud)
...
SELECT t.item_id,
t.item_description,
t.item_type_description
FROM my_view t
ORDER BY t.item_type_description
Run Code Online (Sandbox Code Playgroud)
......相当于使用:
SELECT t.item_id,
t.item_description,
t.item_type_description
FROM (SELECT i.item_id,
i.item_description,
it.item_type_description
FROM ITEMS i
JOIN ITEM_TYPES it ON it.item_type_id = i.item_type_id
ORDER BY i.item_description) t
ORDER BY t.item_type_description
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为:
ORDER BY item_type_description, item_description
我想,除了冷漠之外,没有任何原因。
此类查询字符串通常由图形查询工具生成。用户连接几个表,添加过滤器、排序顺序并测试结果。由于用户可能希望将查询保存为视图,因此该工具添加了 TOP 100 PERCENT。但在这种情况下,用户将 SQL 复制到其代码中,参数化 WHERE 子句,并将所有内容隐藏在数据访问层中。心不在焉,眼不见心不烦。
我看到了我继承的其他代码,这些代码使用SELECT TOP 100 PERCENT
原因很简单:企业管理器曾经试图提供帮助,并格式化您的代码以为您提供帮助。尝试删除它毫无意义,因为它并没有真正伤害到任何东西,下次您进行更改时,EM会再次插入它。
归档时间: |
|
查看次数: |
127923 次 |
最近记录: |