文档库 最新最全的文档下载
当前位置:文档库 › 查询整个数据库中某个特定值所在的表和字段的方法

查询整个数据库中某个特定值所在的表和字段的方法

当数据库很多表的时,难免会出现忘记哪个值会存入哪个表的情况

通过做一个存储过程,只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。前提是要将这个存储过程放在所查询的数据库。在所要查询的数据库中新建查询并执行,内容如下:



CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(@value VARCHAR(1024))
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sql VARCHAR(1024)
DECLARE @table VARCHAR(64)
DECLARE @column VARCHAR(64)
CREATE TABLE #t (tablename VARCHAR(64),columnname VARCHAR(64))
DECLARE TABLES CURSOR
FOR
SELECT https://www.wendangku.net/doc/9b18667039.html,, https://www.wendangku.net/doc/9b18667039.html,
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)
ORDER BY https://www.wendangku.net/doc/9b18667039.html,, https://www.wendangku.net/doc/9b18667039.html,
OPEN TABLES
FETCH NEXT FROM TABLES
INTO @table, @column
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '
SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') '
SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''
SET @sql = @sql + @column + ''')'
EXEC(@sql)
FETCH NEXT FROM TABLES
INTO @table, @column
END
CLOSE TABLES
DEALLOCATE TABLES
SELECT * FROM #t
DROP TABLE #t
End

等执行完后,临时表已建立,后续也不需要再来执行上述表了,只需要输入查询的内容语句即可。

例如,要查询‘ledover’,新建一个查询输入并执行

EXEC SP_FindValueInDB 'ledover'

会返回相应记录,Tablename显示被查询数据所在表,Columnname显示被查询数据所在列。


在AccessProfile,Country,lookup,Region,ReportList,staff,SysUser这7个表中都存在‘ledover’,其中Region,staff,SysUser这3个表都有2列出现。

上处的字段名是指的表中的列名 还是指的 列中某一个 值。如果是指的列名的话,很简单select https://www.wendangku.net/doc/9b18667039.html, as tablename,https://www.wendangku.net/doc/9b18667039.html, as columnnamefrom syscolumns join sysobjects on sysobjects.id = syscolumns.idwhere https://www.wendangku.net/doc/9b18667039.html, like '%此处为列名%搜索' 如果是指的一个值的话,要遍历数据库了。如下:declare@str varchar(100) set@str='张三'--要搜索的字符串 declare@s varchar(8000) declaretb cursorlocalforselects='if exists(select 1 from ['+https://www.wendangku.net/doc/9b18667039.html,+'] where convert(varchar,['+https://www.wendangku.net/doc/9b18667039.html,+']) like ''%'+@str+'%'') print ''select ['+https://www.wendangku.net/doc/9b18667039.html,+'] from ['+https://www.wendangku.net/doc/9b18667039.html,+']'''fromsyscolumns a joinsysobjects b ona.id=b.id whereb.xtype='U'anda.status>=0 --所查列的字段类型 anda.xusertype in(175,239,231,167,56,60,108,106) opentb fetchnextfromtb into@s while @@fetch_status=0 beginexec(@s) fetchnextfromtb into@s endclosetb deallocatetb

相关文档