0

次のテーブルがあるとします。

CREATE TABLE #Pig
(
PigName VARCHAR(10),
Field1 VARCHAR(10),
Field2 VARCHAR(10),
Field3 VARCHAR(10),
Field4 VARCHAR(10),
Field5 VARCHAR(10),
Field6 VARCHAR(10),
Field7 VARCHAR(10),
Field8 VARCHAR(10),
Field9 VARCHAR(10),
Field10 VARCHAR(10),
Field11 VARCHAR(10)
)

文字列「eg」が列のいずれかにある#Pigのすべての行を検索する場合、次のスクリプトを使用する必要がありますか、またはこれに近づくよりコンパクトな方法がありTVPますか?

SELECT  *
FROM    #Pig
WHERE   Field1 LIKE '%eg%' OR
        Field2 LIKE '%eg%' OR
        Field3 LIKE '%eg%' OR
        Field4 LIKE '%eg%' OR
        Field5 LIKE '%eg%' OR
        Field6 LIKE '%eg%' OR
        Field7 LIKE '%eg%' OR
        Field8 LIKE '%eg%' OR
        Field9 LIKE '%eg%' OR
        Field10 LIKE '%eg%' OR
        Field11 LIKE '%eg%'

各フィールドは同じデータ型ですが、実際には接続されていないことに注意してください....そのため、データを正規化することは解決策ではありません。

4

2 に答える 2

1

実際に任意の部分文字列を検索する必要がありますか、それとも単語検索が機能しますか? もしそうなら、全文検索が良い答えかもしれません。

CREATE TABLE dbo.Pig
(
    ID INT IDENTITY CONSTRAINT PK_Pig PRIMARY KEY CLUSTERED,
    PigName VARCHAR(10),
    Field1 VARCHAR(10),
    Field2 VARCHAR(10),
    Field3 VARCHAR(10),
    Field4 VARCHAR(10),
    Field5 VARCHAR(10),
    Field6 VARCHAR(10),
    Field7 VARCHAR(10),
    Field8 VARCHAR(10),
    Field9 VARCHAR(10),
    Field10 VARCHAR(10),
    Field11 VARCHAR(10)
)
GO

CREATE FULLTEXT CATALOG mycatalog;
GO

CREATE FULLTEXT INDEX ON dbo.Pig
( 
    Field1 LANGUAGE 1033,
    Field2 LANGUAGE 1033,
    Field3 LANGUAGE 1033,
    Field4 LANGUAGE 1033,
    Field5 LANGUAGE 1033,
    Field6 LANGUAGE 1033,
    Field7 LANGUAGE 1033,
    Field8 LANGUAGE 1033,
    Field9 LANGUAGE 1033,
    Field10 LANGUAGE 1033,
    Field11 LANGUAGE 1033
) 
KEY INDEX PK_Pig ON mycatalog; 
GO

SELECT  *
FROM    dbo.Pig
WHERE   CONTAINS(*, '"peg*"') -- will find peg, peggy, but not jpeg.

FTS は任意の部分文字列を検索することはできませんが、単語のプレフィックス (上記の例) を検索することができ、その他の強力な機能を備えています。http://msdn.microsoft.com/en-us/library/ms142583.aspx#supportedを参照してください。

全文検索: http://msdn.microsoft.com/en-us/library/ms142583.aspx

于 2013-06-24T00:26:00.800 に答える