为什么忽略此 SQL IF 条件?

Why is this SQL IF condition being ignored?

有这个脚本:

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
CREATE UNIQUE INDEX FtsKeyIndex ON Records([Id])
CREATE FULLTEXT CATALOG ftcatalog AS DEFAULT
CREATE FULLTEXT INDEX ON Records
    (
        Description Language 1033
    )   
    KEY INDEX FtsKeyIndex ON ftcatalog
    WITH STOPLIST = SYSTEM
END

运行它,我得到:

Full-Text Search is not installed, or a full-text component cannot be loaded.

运行 下面一行自己 returns 一个 0:

SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')

也试过:

IF 1 = (SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))

并且:

IF 1 = (select CAST(FULLTEXTSERVICEPROPERTY('IsFullTextInstalled') AS bit))

为什么我的 IF 语句被忽略了?

您的 IF 声明没有被忽略。 编译期间报告错误。您的代码甚至没有机会执行。

您需要将任何依赖于此类条件的代码移动到不同的范围,以便单独编译:

IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
  EXEC sp_executesql N'CREATE UNIQUE INDEX FtsKeyIndex ON Records([Id])'
  EXEC sp_executesql N'CREATE FULLTEXT CATALOG ftcatalog AS DEFAULT'
  EXEC sp_executesql N'CREATE FULLTEXT INDEX ON Records
    (
        Description Language 1033
    )   
    KEY INDEX FtsKeyIndex ON ftcatalog
    WITH STOPLIST = SYSTEM'
END

打个比方 - 在 C# 中,您不会期望能够编写一个方法,给定类型 X 的对象,首先使用反射来确定 X 是否具有调用 Y 的方法,然后直接包含行 X.Y();,即使它位于 if 块内。