我有多个表(比如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));
答案 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)