无法在 SQL Server 中的 WHERE 子句之后放置 OPTION(重新编译)

Imm*_*tal 0 t-sql sql-server

我试图将 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)) 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ith 7

这是 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 
Run Code Online (Sandbox Code Playgroud)

如果您有索引,Code, Activity或者Activity, Code无论如何您都不需要它,因为它始终可以使用带有简单搜索的计划