mssql sqlserver 获取表内容”包含指定值”的方法分享


摘要:
在一次项目升级中,用户方要求查一下数据库中包含“指定内容”的数据表名及相应的列名,
下文将采用遍历所有列名的方法,将符合条件的信息输出


1 首先根据 INFORMATION_SCHEMA.COLUMNS和sysobjects系统表获取生成所有列名遍历的查询语句

注意事项:
此查询如果对于数据量大的数据表会非常耗时

例:

  set NOCOUNT ON
Declare @maxCount bigint
declare @i bigint
declare @rowCount bigint
DECLARE @tmpTable TABLE
(
keyid bigint identity (1,1),
sqlInfo varchar(max)
) 
 
 ----生成表内容包含 "maomao"的表sql  
INSERT INTO @tmpTable(sqlInfo)
select 'select @rowCount=count (['+COLUMN_NAME+']) from ['+TABLE_NAME+'] where ['+COLUMN_NAME+'] like ''%maomao''' from INFORMATION_SCHEMA.COLUMNS isc, sysobjects so where isc.TABLE_NAME=so.name and so.xtype='U' --where COLUMN_NAME like '%mail%'
 
 
---select * from @tmpTable as t 
set @i=1
set @maxCount=(select max(keyId) from @tmpTable)
 
while (@i <=@maxCount )
begin
Declare @sql nvarchar(500)
set @sql=(SELECT sqlInfo FROM @tmpTable where keyId=@i)

exec sp_executesql @sql, N'@rowCount int out',  @rowCount out

if(@rowCount > 0)
begin
 --打印出包含指定字符的sql脚本
print @sql   
end

set @i=@i+1
end