摘要:网上有不少这种写法但是很多都无法运行,尝试看了几篇文章修改结合了下以做备份,以后可以写成存储过程丢参来做成查询工具1......
/*
查询数据库中包含指定字符串的数据表名及相应记录
*/
USE [DatabaseName]
GO
DECLARE @key VARCHAR(30)
SET @key = '182' --替换为要查找的字符串
DECLARE @tabName VARCHAR(40),@colName VARCHAR(40)
DECLARE @sql VARCHAR(2000)
DECLARE @tsql VARCHAR(8000)
--2.用游标Cursor_Table,遍历所有表
DECLARE tabCursor CURSOR FOR
SELECT name FROM sysobjects WHERE xtype = 'u' AND name <> 'dtproperties'
OPEN tabCursor
FETCH NEXT FROM tabCursor INTO @tabName
WHILE @@fetch_status = 0
BEGIN
SET @tsql = ''
--3.在表中,用游标columnCursor,遍历所有字段。注意,只遍历字符串类型的字段(列)
DECLARE colCursor CURSOR FOR
SELECT Name FROM SysColumns WHERE id=Object_Id(@tabName) and
(
xtype = 35 or --text
xtype = 99 or --ntext
xtype = 167 or --varchar
xtype = 175 or --char
xtype = 231 or --nvarchar
xtype = 239 or --nchar
xtype = 241 --xml
)
OPEN colCursor
FETCH NEXT FROM colCursor INTO @colName
WHILE @@fetch_status = 0
BEGIN
--4.在表的字段中,对每一行进行模糊搜索,并输出找到的信息。
SET @sql = 'if(exists(select * from ' + @tabName + ' where '
SET @sql = @sql + @colName + ' like ''%' + @key + '%'')) begin select * from '
SET @sql = @sql + @tabName + ' where ' + @colName + ' like ''%' + @key + '%'';select '''
+ @tabName + ''' as TableName end'
SET @tsql = @tsql + @sql + ';'
FETCH NEXT FROM colCursor INTO @colName
END
EXEC(@tsql)
CLOSE colCursor
DEALLOCATE colCursor
FETCH NEXT FROM tabCursor INTO @tabName
END
CLOSE tabCursor
DEALLOCATE tabCursor