首页 > 解决方案 > 无法在 SQL Server 中的 WHERE 子句之后放置 OPTION(重新编译)

问题描述

我试图将 Option Recompile 放在 WHERE 子句之后,但由于语法错误而不断失败:Incorrect Syntax near recompile. Expecting ( or SELECT

这是我的sql代码:

IF EXISTS (SELECT 1 FROM Table1 WHERE Code = @Code AND Activity = 'T'  OPTION (RECOMPILE)) 

我知道在很多情况下,如果没有 AND 条件,它会起作用。我已经在网上搜索了一个没有任何有用信息的解决方案。有任何想法吗?

标签: sql-servertsql

解决方案


这是 SQL 语法的限制。

无法将查询提示放置在IF.

您可以使用

DECLARE @Result BIT

SELECT @Result = CASE
                   WHEN EXISTS (SELECT 1
                                FROM   Table1
                                WHERE  Code = @Code
                                       AND Activity = 'T') THEN 1
                   ELSE 0
                 END
OPTION (RECOMPILE);

IF @Result = 1
  BEGIN
      TODO:
  END 

如果你有一个索引Code, Activity或者Activity, Code你不应该需要这个,那么它总是可以使用一个简单的搜索计划


推荐阅读