在tsql中,tablename(1)是什么意思

在tsql中,tablename(1)是什么意思,sql,tsql,Sql,Tsql,我试图分析一个查询以提取逻辑,我看到几个select语句使用语法select FROM tableName(1)。下面是使用这种语法的几个示例。这是一个相当大的insert语句,因此我无法发布整个查询 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.f

我试图分析一个查询以提取逻辑,我看到几个select语句使用语法select FROM tableName(1)。下面是使用这种语法的几个示例。这是一个相当大的insert语句,因此我无法发布整个查询

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
选择nh.firm\u code、nh.acct\u num、nh.sub\u code、b.amt
从nav_hist nh(1),断点b
其中nh.sales\u load\u id=b.schedule\u id
选择总和(工作日系数)
从计算历史工作日(1)
其中weekdays.sys_date>=dateadd(dd,f.usr_num_days-7,f.sys_date)
和工作日.sys_date

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

我做了一些挖掘,我认为这里发生的事情是,您实际上使用了一个查询提示,即“(1)”。这是一个索引查询提示,您可以阅读有关这些的更多信息

根据文档,使用这种格式而不详细说明是不推荐的,我无法在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.

(1)实际上是一个别名的后缀。在SQL Server 2005和2012中测试这一点会导致“1”附近出现语法错误
不正确的语法
。您在什么rdbms中看到了这一点?这在SQL Server 2008中运行没有问题。工作日是一个有效的表名而不是别名。如果
工作日
是一个表而不是别名,那么什么是
计算历史
?表名不是
计算历史
,并且它的别名是
工作日
?至少,从你的问题来看是这样的。这个数据库的兼容版本是什么?您能够在SSMS中临时运行这些确切的语句吗?在上面提供的链接中,您可以在Arguments/With下找到它。谢谢你的解释。我仍然不能100%确定开发人员为什么这样做,但至少我了解了这意味着什么。酷:)但是,请注意(再次,假设我是正确的),这意味着您可能正在使用PK进行查询。也许它不会产生最佳的查询计划,您希望查看它。