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

查询SQL Server(或Sybase)数据库中哪些表中含有“某一列”=“某一个值”的表

此为原创:

create procedure get_table
@colname varchar(30),
@colvalue varchar(30),
@coltype varchar(30)=null,
@colformat varchar(30)=null
as
begin
    declare @sql varchar(100), @tablename varchar(30)
    create table #tables( tablename varchar(30))
    declare cur_table cursor for
        select name from sysobjects a
        where type = 'U' and uid = 1 and exists( select 1 from syscolumns b where b.id = a.id and b.name = @colname)
    open cur_table
    fetch cur_table into @tablename
    WHILE @@FETCH_STATUS = 0 begin
        select @sql = 'insert into #tables select'''+ @tablename +''' where exists( select 1 from '+ @tablename +' where '+ @colname +' = '''+ @colvalue +''')'
        exec(@sql)
    fetch cur_table into @tablename
    end
    close cur_table
    deallocate cur_table
    select * from #tables
end
go

exec get_table 'item_code', '1'

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

此为转帖,原文地址:

http://www.cnblogs.com/michaelxu/archive/2009/11/04/1596106.html

 

有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,在网上搜了一下,找到一个比较好的方法,通过一个存储过程实现的。只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。

前提是要将这个存储过程放在所查询的数据库。


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  o.name, c.name 
    
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  o.name, c.name 

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

 

例如,要查询值'BBQ CHIC SW',结果如下:

返回三条记录,说明这个值存在于三个表中,分别为_dts_menudef, g_dts_menudef和g_recipe中,字段名分别为name1, name1, name。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值