查询数据库中某个表中某一列是否包含某个值的proc(sqlserver)

 

 

 

声明

if object_id('spFind_Column_In_DB') is not null drop proc spFind_Column_In_DB
go

--date:2013-5-10
--author:dyq
--decs:搜索数据库中是否存在输入的值
--results:tablename,columname
create proc spFind_Column_In_DB 

@type int,--类型:1为文字类型、2为数值类型 
@str nvarchar(100)--需要搜索的名字 

as
--创建临时表存放结果 
create table #tbl(PK int identity primary key ,tbl sysname,col sysname) 
declare @tbl nvarchar(300),@col sysname,@sql nvarchar(1000) 
if @type=1 
begin
declare curTable cursor fast_forward 
for 
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id 
where o.type_desc='user_table' and user_type_id in (167,175,231,239,35,99) 
end
else
begin 
declare curTable cursor fast_forward 
for 
select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id 
where o.type_desc='user_table' and user_type_id in (56,48,52,59,60,62,106,108,122) 
end
open curtable 
fetch next from curtable into @tbl,@col 
while @@FETCH_STATUS=0 
begin
set @sql='if exists (select * from '+@tbl+' where '
if @type=1 
begin
set @sql += @col + ' like ''%'+@str +'%'')'
end
else 
begin
set @sql +=@col + ' in ('+@str+'))'
end

set @sql += ' INSERT #TBL(tbl,col) VALUES('''+@tbl+''','''+@col+''')'
--print @sql 
exec (@sql) 
fetch next from curtable into @tbl,@col 
end
close curtable 
deallocate curtable 
select * from #tbl
drop table #tbl

调用 exec spFind_Column_In_DB 1,'需要查询包含的值'

 

posted @ 2020-11-25 10:50  GU天乐乐乐!  阅读(630)  评论(0编辑  收藏  举报