首页 > 代码库 > 查找含有指定字符的表
查找含有指定字符的表
有的时候,我们想知道包含特定字符的表都有哪些,怎么办呢?其实很简单: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的表和对应的字段名称。这只是一个解决方案,不是很完美。比方上面的查询当数据库比较庞大时,执行会比较耗时。园子里面的朋友有好解决方案可以@下我,相互学习。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。