Sql 服务器端搜索功能

Sql 服务器端搜索功能,sql,sql-server,web-services,stored-procedures,Sql,Sql Server,Web Services,Stored Procedures,需要实现服务器端搜索功能 我的要求如下: 文本框中插入的字符串必须签入数据库中的每一列数据。如果匹配或字符串包含在数据库中的任何列数据中,则该行可有效显示。 还有一个分页部分,也是在数据库中处理的,存储过程只需发送指定数量的行,这些行是根据pageIndex计算的,并且rowCount传递给存储过程,此计算也仅在存储过程中进行 在存储过程中,我们使用联接从不同的表中提取数据并将其推送到临时表中,最后从临时表中返回数据 这里我的问题是我无法使用Contains()方法来搜索模式,因此应该采用什么方

需要实现服务器端搜索功能

我的要求如下:

文本框中插入的字符串必须签入数据库中的每一列数据。如果匹配或字符串包含在数据库中的任何列数据中,则该行可有效显示。 还有一个分页部分,也是在数据库中处理的,存储过程只需发送指定数量的行,这些行是根据pageIndex计算的,并且rowCount传递给存储过程,此计算也仅在存储过程中进行

在存储过程中,我们使用联接从不同的表中提取数据并将其推送到临时表中,最后从临时表中返回数据

这里我的问题是我无法使用Contains()方法来搜索模式,因此应该采用什么方法来实现此功能。这样才能有效地完成这项工作


谢谢

检查以下查询。您需要将test替换为要搜索的值。这将给出匹配字符串的列名和值。我希望这能帮助你找到答案

Declare @SearchStr nvarchar(100)
set @SearchStr='test'

DECLARE @Results TABLE  (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
    SET @ColumnName = ''
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM    INFORMATION_SCHEMA.TABLES
        WHERE       TABLE_TYPE = 'BASE TABLE'
            AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND TABLE_NAME  = PARSENAME(@TableName, 1)
                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO @Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END 
END

SELECT ColumnName, ColumnValue FROM @Results`