查询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。