sql 数据库中只靠一个数据,查询到所在表和列名

Posted 关键步就几步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 数据库中只靠一个数据,查询到所在表和列名相关的知识,希望对你有一定的参考价值。

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

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

注:1步骤是创建存储过程,可以在任何一个数据库中使用,2步骤是调用它来查找数据库中所有牵扯到的列以及对应的表。 只需要一个数据 真是非常方便

 
一、首先 点击新建查询 ,左上角选择到自己的数据库,然后把下面这段复制进去  然后运行
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
 

二、然后,输入    EXEC [SP_findvalueindb] ‘这里是你要查的内容值‘    运行就ok了

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

技术分享

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

非常好用。





















































以上是关于sql 数据库中只靠一个数据,查询到所在表和列名的主要内容,如果未能解决你的问题,请参考以下文章

用于计算表中行数的 SQL 查询

如何MyBatis中使用动态SQL查询与注释

SQL Server如何查找表名或列名中包含空格的表和列

如何在 SQL 中只知道一个表的列名来搜索表的名称? [复制]

只知道某个SQL数据库表的一项内容,如何查询它所在的数据表

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