查找含有指定字符的表

     有的时候,我们想知道包含特定字符的表都有哪些,怎么办呢?其实很简单: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的表和对应的字段名称。这只是一个解决方案,不是很完美。比方上面的查询当数据库比较庞大时,执行会比较耗时。园子里面的朋友有好解决方案可以@下我,相互学习。

posted on 2014-06-12 13:50  郊区的小土豆  阅读(332)  评论(0编辑  收藏  举报