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

How to search for a word or phrase in SQL Server 2014 Tables?

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

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

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

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

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));
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

我使用以下 link 作为此要求的基础。

https://social.technet.microsoft.com/wiki/contents/articles/24169.sql-server-searching-all-columns-in-a-table-for-a-string.aspx