2

SQLのインラインテーブル値関数内のIFelseIfロジックを使用して、そのロジックに基づいて包含テーブルを返そうとしています。しかし、IFElseIFブロックで構文上の問題が発生しています。助けてくれてありがとう。包含テーブルの列をパラメーター化できないため、ifelseステートメントを使用する必要があります。これがコードです。ありがとう。

私は得ています

メッセージ156、レベル15、状態1、プロシージャFullTextSearch、行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
4

3 に答える 3

0

まず、最初の IF に = の代わりに == があります。

そうそう、ELSE の CONTAINSTABLE パラメータ内に ProjectDetails が 2 回リストされていることに気付きました

特定のフィールドを検索する場合は、次の構文を使用できます。

WHERE Title LIKE '%'+ @Search +'%'
      OR ProjectDetails LIKE '%' + @Search + '%'
      OR ContactInfo LIKE '%' + @Search + '%')

(警告) この構文はインデックスを無視します。

インデックス作成で機能するソリューションについては、このブログを確認してください。良い解決策がありそうです。

于 2009-02-25T19:00:50.663 に答える
0

SQL Management Studio のマルチステートメント関数テンプレート、つまりメニューを見てください: [View] -> [Template Explorer] - [Create Multi-Statement Table-valued Function]。

問題は、複数ステートメント関数の構文が異なることです。また、jmein が言ったように、最初の if に == があることに注意してください。

于 2009-02-25T19:05:47.017 に答える