为什么忽略此SQL IF条件?

时间:2017-05-24 14:02:06

标签: sql-server sqlcmd

有这个脚本:

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

运行它,我得到:

  

未安装全文搜索,或者不能使用全文组件   加载。

单独运行以下行将返回0:

SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')

还尝试过:

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

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

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

1 个答案:

答案 0 :(得分:1)

您的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,即使它位于$('#resize').resizable({ helper: "ui-resizable-helper", minWidth: 150, minHeight: 150, grid: [10, 10] }); 块内。