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