SQL Server数据库查找包含特定值的表,查询结果包括:数据库名、表名、列名和匹配的值。
脚本内容
-- 设置要查找的值 DECLARE @SearchValue NVARCHAR(100) = 'LW50.COM'; -- 创建一个临时表来存储结果 CREATE TABLE #SearchResults ( DatabaseName NVARCHAR(128), -- 数据库名 TableName NVARCHAR(256), -- 表名 ColumnName NVARCHAR(128), -- 列名 FoundValue NVARCHAR(MAX) -- 匹配的值 ); -- 指定数据库名称 DECLARE @DatabaseName NVARCHAR(128) = 'RYAccountsDB'; -- 动态生成 SQL,切换到当前数据库 DECLARE @SQL NVARCHAR(MAX); SET @SQL = 'USE ' + QUOTENAME(@DatabaseName) + '; DECLARE @TableName NVARCHAR(256); DECLARE @ColumnName NVARCHAR(128); DECLARE @Query NVARCHAR(MAX); -- 游标遍历当前数据库的所有用户表 DECLARE TableCursor CURSOR FOR SELECT TABLE_SCHEMA + ''.'' + TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE IN (''char'', ''varchar'', ''nchar'', ''nvarchar'', ''int'', ''bigint'', ''smallint'', ''tinyint'', ''decimal'', ''numeric'', ''float'', ''real'', ''money'', ''smallmoney'', ''text'', ''ntext''); OPEN TableCursor; FETCH NEXT FROM TableCursor INTO @TableName, @ColumnName; WHILE @@FETCH_STATUS = 0 BEGIN -- 动态生成查询语句 SET @Query = ''INSERT INTO #SearchResults (DatabaseName, TableName, ColumnName, FoundValue) SELECT ''''' + @DatabaseName + ''''' AS DatabaseName, '''''' + @TableName + '''''' AS TableName, '''''' + @ColumnName + '''''' AS ColumnName, CAST('' + @ColumnName + '' AS NVARCHAR(MAX)) AS FoundValue FROM '' + @TableName + '' WHERE CAST('' + @ColumnName + '' AS NVARCHAR(MAX)) LIKE ''''%' + @SearchValue + '%''''''; -- 执行动态 SQL BEGIN TRY EXEC sp_executesql @Query; END TRY BEGIN CATCH -- 如果查询出错(例如列类型不匹配),跳过该列 PRINT ''Error searching in table: '' + @TableName + '', column: '' + @ColumnName; END CATCH FETCH NEXT FROM TableCursor INTO @TableName, @ColumnName; END; CLOSE TableCursor; DEALLOCATE TableCursor;'; -- 执行动态 SQL EXEC sp_executesql @SQL; -- 查询结果,显示包含目标值的详细信息 SELECT DISTINCT DatabaseName, TableName, ColumnName, FoundValue FROM #SearchResults; -- 清理临时表 DROP TABLE #SearchResults;
脚本说明
设置查找值:
在 @SearchValue 中设置要查找的值(例如 LW50.COM,替换成你要查找你内容)。
指定数据库:
在 @DatabaseName 中指定数据库名称(例如 RYAccountsDB,替换成你要查找的数据库名)。
最后
查询结果看图1,列出了表名,列名,方便定位。
类似工具:
END!
发表评论