zoukankan      html  css  js  c++  java
  • 查找含有指定字符的表

         有的时候,我们想知道包含特定字符的表都有哪些,怎么办呢?其实很简单:SELECT * FROM dbo.MyCustomer WHERE CustomerName LIKE '%AA%' 这个样子的SQL我们都不陌生,很简单的查询。再回过来看下我们现在遇到的问题:我们不知道表的名称、字段的名称,那我们只要列出所有的表和对应的字段然后遍历一下就可以了,换句话说,我们只需要把上面的表名【MyCustomer】和字段名【CustomerName】替换成变量就可以。有了SQL语句通过【EXEC】我们就可以做到想查什么就有什么了。下面我们来看下具体的实现方式,为了方便使用,我们把整个实现包装成一个存储过程:

    CREATE PROCEDURE [dbo].[查找含有指定字符的表]
    (
    @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 + ''')' 
    
    PRINT @sql
    EXEC(@sql) 
    
    FETCH NEXT FROM TABLES 
    INTO @table, @column 
    END 
    
    CLOSE TABLES 
    DEALLOCATE TABLES 
    
    SELECT * 
    FROM #t 
    
    DROP TABLE #t 
    
    
    END
    
    --调用方式
    EXEC [查找含有指定字符的表] 'AAA'

         上面就是查询结果,我们查询的是所有包含AAA的表和对应的字段名称。这只是一个解决方案,不是很完美。比方上面的查询当数据库比较庞大时,执行会比较耗时。园子里面的朋友有好解决方案可以@下我,相互学习。

  • 相关阅读:
    「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的
    「译」Graal JIT编译器是如何工作的
    [Inside HotSpot] C1循环不变代码提升优化
    Java逆变(Covariant)和协变(Contravariant)
    [Inside HotSpot] Xcode编译调试OpenJDK12
    [Inside HotSpot] UseParallelGC和UseParallelOldGC的区别
    [Inside HotSpot] Java分代堆
    [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
    [Inside HotSpot] Epsilon GC
    [Inside HotSpot] Serial垃圾回收器 (一) Full GC
  • 原文地址:https://www.cnblogs.com/mfkaudx/p/3783812.html
Copyright © 2011-2022 走看看