美文网首页
数据库查询表字段、表名以及表内容

数据库查询表字段、表名以及表内容

作者: 陌上的红蔷薇 | 来源:发表于2022-07-27 16:43 被阅读0次

    一、查询表

    1、oracle

    SELECT * FROM all_all_tables WHERE table_name = '表名';

    2、sqlserver

    select * from sysobjects where name='表名'

    二、查询表字段

    1、oracle

    SELECT owner, table_name, column_name

                      FROM all_tab_columns WHERE column_name='字段名'

    2、sqlserver

    select A.[name] AS TABNAME,B.name AS COLNAME from sysobjects A,syscolumns B

    where A.id =B.id AND  B.name LIKE '%MAIN%'

    三、查询表内容

    1、oracle

    SET SERVEROUTPUT ON SIZE 100000;

    DECLARE

          match_count INTEGER;

          v_sql varchar2(2000);

        BEGIN

          FOR t IN (SELECT owner, table_name, column_name

                      FROM all_tab_columns

                      WHERE owner = 'xxxx'  ---schema

                    and data_type LIKE '%VARCHAR%' ---datatype

                AND table_name NOT LIKE '%copy%' )LOOP

              match_count:=0;

              v_sql:=  'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE '||t.column_name||' = :1'; 

            ---  dbms_output.put_line( t.owner || '.' || t.table_name) ;

            EXECUTE IMMEDIATE v_sql INTO match_count USING '查询的内容';

            IF match_count > 0 THEN

              dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );

            END IF;

          END LOOP;

        END;

    2、sqlserver

    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 '查找内容'

    相关文章

      网友评论

          本文标题:数据库查询表字段、表名以及表内容

          本文链接:https://www.haomeiwen.com/subject/tguzirtx.html