6

我正在尝试分析查询以提取逻辑,并且看到几个使用语法 SELECT FROM tableName(1) 的选择语句。下面是使用此语法的几个示例。这是一个相当大的插入语句,因此我无法发布整个查询。

select nh.firm_code, nh.acct_num, nh.sub_code, b.amt
from nav_hist nh(1), breakpoints b
where nh.sales_load_id = b.schedule_id

select sum(weekdays.factor)
from calc_hist weekdays(1)
where weekdays.sys_date >= dateadd(dd, f.usr_num_days - 7, f.sys_date)
      and weekdays.sys_date < f.sys_date
      and c.firm_code = weekdays.firm_code

有谁知道 from 语句中的 (1) 是什么意思?

4

1 回答 1

9

我已经进行了一些挖掘,我认为这里发生的事情是您实际上正在使用一个查询提示,即“(1)”。这被解释为 INDEX 查询提示,您可以在此处阅读有关这些的更多信息。

根据使用此格式但未指定 WITH 的文档,我在 2008 年无法执行此操作,但可能您使用的是不同的特定版本或使用了一些会影响此的兼容模式。

如果您可以为包含这些语法的查询提供更多资源,我将能够继续挖掘。

这是我在服务器上运行时得到的结果:

select * from sysobjects WITH (1)
--Warning: Index hints supplied for view 'sysobjects' will be ignored.

编辑
我对此进行了进一步研究,假设我的假设是正确的,并且

SELECT 1 FROM TABLENAME(1)

等于

SELECT 1 FROM TABLENAME WITH (1)

那么下面就证明了一点,当指定一个整数大于表中可用索引的个数时会导致异常。看一看:

--Table sysjobs has 4 indexes
select * from msdb..sysjobs with (4)
--1 row affected
select * from msdb..sysjobs with (5)
--Msg 307, Level 16, State 1, Line 2
--Index ID 5 on table 'msdb..sysjobs' (specified in the FROM clause) does not exist.
于 2012-05-02T17:14:41.490 回答