1

ストアド プロシージャに渡された TSQL パラメータに基づいて、Contains() メソッドを使用してフル テキスト インデックスを検索するクエリを根本的に解決しようとしています。部分的な単語 (ポリシー番号の最初の 5 文字など) の照合に使用されるため、Contains は prefix_search を実行する必要があります。

これは私の質問です。

CREATE PROCEDURE [SearchMail]
(
    @AccountId int,
    @SearchTerm VARCHAR(100)
)
AS

SET NOCOUNT ON

    BEGIN
        SELECT MailId, AccountId, ServerId, ToAddress, FromAddress, DateSent, DateReceived ,
                       [Subject], Body, PolicyNumber, ProducerNumber, IsRead, IsDeleted, IsImaged,
                       DateUpdated, DateDeleted, DateImaged, UpdatedBy, DeletedBy, ImagedBy  
        FROM   MailMessages
        WHERE  AccountId = @AccountId 
               AND CONTAINS(([Subject], Body, PolicyNumber, ProducerNumber, FromAddress), ' "' + @SearchTerm + '*" ')
               AND IsDeleted = 0 
               AND IsImaged = 0
    END
GO

しかし、これを実行しようとすると、Enterprise Manager が次のエラーで応答します: "+" 付近の構文が正しくありません

この時点で、何が間違っているのかわかりません。

4

1 に答える 1

2
CREATE PROCEDURE [SearchMail] 
( 
    @AccountId int, 
    @SearchTerm VARCHAR(100) 
) 
AS 

SET NOCOUNT ON 

BEGIN 
   Declare @SearchWithWildcard VARCHAR(200)
   SET @SearchWithWildcard = '"' + @SearchTerm + '*"' 

   SELECT MailId, AccountId, ServerId, ToAddress, FromAddress, DateSent, DateReceived, 
          [Subject], Body, PolicyNumber, ProducerNumber, IsRead, IsDeleted, IsImaged, 
          DateUpdated, DateDeleted, DateImaged, UpdatedBy, DeletedBy, ImagedBy   
   FROM   MailMessages 
   WHERE  AccountId = @AccountId  
          AND CONTAINS(([Subject], Body, PolicyNumber, ProducerNumber, FromAddress),
                       @SearchWithWildcard) 
          AND IsDeleted = 0  
          AND IsImaged = 0 
END 
GO 

参照内容:

指定したテキストで始まる単語または語句の一致を指定します。接頭語を二重引用符 ( "") で囲み、終了引用符の前にアスタリスク ( *) を追加して、アスタリスクの前に指定された単純語で始まるすべてのテキストが一致するようにします。句は次のように指定する必要があります: CONTAINS (column, '"text**"'). アスタリスクは、0 個、1 個、またはそれ以上の文字 (単語または語句の語根の単語) に一致します。テキストとアスタリスクが二重引用符で区切られていないため、述語が の CONTAINS (column, 'text*')場合、フルテキスト検索はアスタリスクを文字と見なし、完全一致を検索しtext*ます。通常、ワード ブレーカーはこのような文字を無視するため、フルテキスト エンジンはアスタリスク ( *) 文字を含む単語を検索しません。

于 2012-04-19T23:53:50.460 に答える