查询数据在那些表中出现过(可以根据文字或者数值或者GUID进行查询)

--DROP TABLE #tbl

DECLARE @type int--类型:1为文字类型、2为数值类型 、3为GUID
  DECLARE  @str nvarchar(100)--需要搜索的名字 
        SET @type=1
        SET @str='定金'
--创建临时表存放结果 

    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 
                IF @type=2 
                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
        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 (36)
        END
        
    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 += 'CAST(' + @col + ' AS NVARCHAR(MAX)) like ''%'+@str +'%'')'
                        --set @sql += @col + ' = '''+@str +''')'
        end
        else 
        BEGIN
                        IF @type=2 
                        BEGIN
                                set @sql +=@col + ' in ('+@str+'))'
                        END
            ELSE
            BEGIN
                                set @sql += @col + ' = '''+@str +''')'
            END
            
        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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值