【发布时间】:2009-02-25 18:48:10
【问题描述】:
我正在尝试在 SQL 的内联表值函数中使用 IF else If 逻辑,并根据该逻辑返回一个包含表。但我遇到了 IF Else IF 块的语法问题。谢谢您的帮助。因为我无法对包含表中的列进行参数化,所以我不得不求助于使用 if else 语句。这是代码。谢谢。
我来了
消息 156,级别 15,状态 1,过程全文搜索,第 17 行 关键字“IF”附近的语法不正确。
ALTER FUNCTION [dbo].[FullTextSearch]
(
@Columns nvarchar(100), @SearchPhrase nvarchar(100)
)
RETURNS TABLE
AS
RETURN
IF (@Columns='Title')
BEGIN
SELECT *
from projects as P inner join
containstable(PROJECTS, Title, @SearchPhrase) as K
on P.project_id = K.[KEY]
END
ELSE IF (@Columns='Project_Details')
BEGIN
SELECT *
from projects as P inner join
containstable(PROJECTS, Project_Details, @SearchPhrase) as K
on P.project_id = K.[KEY]
END
ELSE IF (@Columns='Contact_Info')
BEGIN
SELECT *
from projects as P inner join
containstable(PROJECTS, Contact_Info, @SearchPhrase) as K
on P.project_id = K.[KEY]
END
ELSE IF (@Columns='Project_Description')
BEGIN
SELECT *
from projects as P inner join
containstable(PROJECTS, Project_Description, @SearchPhrase) as K
on P.project_id = K.[KEY]
END
ELSE -- (@Columns='All')
BEGIN
SELECT *
from projects as P inner join
containstable(PROJECTS, (Title, Project_Details, Contact_Info, Project_Description), @SearchPhrase) as K
on P.project_id = K.[KEY]
END
【问题讨论】:
-
我只是想知道你到底想用这个查询做什么。
-
我在 C# 上有一个带有 asp.net 的 LinqTOSQL 层的搜索界面,问题是,LINQ to SQL 很棒,但它不支持全文搜索功能,所以除了程序别无他法或使用表值函数。我已经阅读了有关使用包装器/扩展的信息,但决定这样做。
-
因此您正在尝试在字段中搜索字符串。你知道它可能在哪些领域,或者可能是所有领域吗?
-
这是基于用户选择的动态。它可以是单个字段或所有字段。我可以创建函数并运行它,如果我没有那些 IF Else 语句,但我试图最小化资源而不是每次都选择所有。有没有办法对包含表中的列进行参数化?
-
我不确定,因为我以前从未使用过它
标签: sql linq-to-sql full-text-search user-defined-functions