SQL Server - 如何在Update命令上提示索引?

时间:2014-07-26 20:40:59

标签: sql-server sql-update hint

我尝试执行以下命令强制更新使用非聚集索引:

 UPDATE Flights 
 SET Airtime=5555678
 WHERE Distance=10000
 OPTION (TABLE HINT(Flights, INDEX (DistanceIndex)))

......它的错误:

  

Msg 8724,Level 16,State 1,Line 75
  无法执行查询。表值或OPENROWSET功能'航班'不能在TABLE HINT子句中指定。

我无法找到关于如何在TABLE HINT语句中正确形成语法的明确建议。

任何人都可以告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:9)

请尝试以下操作:

UPDATE F
SET F.Airtime=5555678
FROM Flights F WITH (INDEX (DistanceIndex))
WHERE F.Distance=10000

UPDATE Flights
SET Airtime=5555678
FROM Flights -- this line is added to your initial query
WHERE Distance=10000
OPTION (TABLE HINT(Flights, INDEX (DistanceIndex)))

答案 1 :(得分:4)

@ i-one的回答是正确的,也是推荐的方式。

您也可以使用

UPDATE F
SET    Airtime = 5555678
FROM   Flights F
WHERE  Distance = 10000 
OPTION (TABLE HINT(F, INDEX (DistanceIndex)))

But the documentation states

  

我们建议使用INDEX,FORCESCAN或FORCESEEK表提示作为   查询提示仅在计划指南的上下文中。