为什么忽略此 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
块内。
有这个脚本:
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
块内。