如何在SQL Server 2014表中搜索单词或短语?

时间:2017-03-17 20:54:19

标签: sql-server full-text-search sql-server-2014 full-text-indexing

我有多个表(比如TableA,TableB,TableC),它们有用于存储6种语言值的列。 SQL Server 2014中的每个表中都有数千行。

在这三个表中搜索单词或短语或搜索字符串的最佳方法是什么(搜索字符串可以在这些表的任何列中找到)?

我是否为每个表(6 x 3 = 18个视图)为每种语言创建单独的视图,然后在视图上创建全文索引?

我还需要获取在表中找到搜索字符串的表名和列名,因为我需要将表名和列名传递给其他存储过程以进行进一步处理。

Create TableA ( 
AID int, 
LanguageID int, 
ACol1 nvarchar(100), 
ACol2 nvarchar(100));

Create TableB ( 
BID int, 
LanguageID int, 
BCol1 nvarchar(100), 
BCol2 nvarchar(100),
BCol3 nvarchar(100));

Create TableC ( 
CID int, 
LanguageID int, 
CCol1 nvarchar(100), 
CCol2 nvarchar(100),
CCol3 nvarchar(100),
CCol4 nvarchar(100));

2 个答案:

答案 0 :(得分:1)

DECLARE @SearchString VARCHAR(200) = 'John'--give search value
DECLARE @IterationTable TABLE   (ID INT IDENTITY(1, 1),
                                Seql VARCHAR(MAX))
DECLARE @StartLoop INT
DECLARE @EndLoop INT

IF OBJECT_ID('tempdb..##Result') IS NOT NULL
    DROP TABLE ##Result

CREATE TABLE ##Result (TableName SYSNAME, ColumnName SYSNAME) 

INSERT INTO @IterationTable
SELECT CONCAT('IF EXISTS(SELECT TOP 1 1 FROM ', QUOTENAME(TABLE_SCHEMA), '.', QUOTENAME(TABLE_NAME), ' WHERE CHARINDEX(''', @SearchString,''', ', QUOTENAME(COLUMN_NAME), ') > 0)', CHAR(13)+CHAR(10), 'BEGIN', CHAR(13)+CHAR(10), 'INSERT INTO ##Result ', CHAR(13)+CHAR(10),'SELECT ''', QUOTENAME(TABLE_NAME),''',''' , QUOTENAME(COLUMN_NAME), '''', CHAR(13)+CHAR(10), 'END')
--SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN('VARCHAR', 'NVARCHAR','CHAR','NCHAR')

SELECT @EndLoop = @@IDENTITY, @StartLoop = 1

--SELECT *,@EndLoop
--FROM @IterationTable

WHILE @StartLoop <= @EndLoop
BEGIN
    DECLARE @SQL VARCHAR(MAX) 

    SELECT @SQL = Seql
    FROM @IterationTable
    WHERE ID = @StartLoop

    EXEC(@SQL);

    PRINT @SQL;

    SET @StartLoop = @StartLoop + 1
END

SELECT * FROM ##Result

--select * from tableC

答案 1 :(得分:0)