数据库寻找一个string所在的表

数据库寻找一个string所在的表

http://topic.csdn.net/u/20120619/14/2c920d2a-544f-4a91-ae23-953f5eb9893f.html?48501

方法1偶尔会出错

 

--方法1
declare @sSearchContent varchar(100)='f6f89834-817c-47d7-a436-6484754111cb'
-----------------------------------------------------------------------------------------------
DECLARE @Table TABLE(ID INT IDENTITY(1,1),columnName VARCHAR(100),tablename VARCHAR(100))
DECLARE @Line INT = 1
DECLARE @Total INT
DECLARE @Sql NVARCHAR(4000)
DECLARE @columnName VARCHAR(100)
DECLARE @TableName VARCHAR(100)
DECLARE @num int 

INSERT INTO @Table
SELECT A.name,OBJECT_NAME(A.object_id) AS tablename FROM SYS.COLUMNS AS A INNER JOIN SYSOBJECTS AS B ON A.object_id = B.id AND B.xtype = 'U' AND system_type_id = 167

SELECT @Total = COUNT(1) FROM @Table

WHILE @Line <= @Total
BEGIN
    SELECT @columnName = columnName,@TableName = tablename
    FROM @Table 
    WHERE ID = @Line
    
    --set @sql='select @a=count(*) from ' + @TableName + ' WHERE ' + @columnName + ' = ''刘八''' 
      set @sql='select @a=count(*) from ' + @TableName + ' WHERE ' + @columnName + ' = ''' + @sSearchContent + ''''
    exec sp_executesql @sql,N'@a int output',@num output 
    
    IF @num > 0
    BEGIN
        SELECT @TableName AS TableName,@columnName AS ColumnName
    END
    
    SET @Line = @Line + 1
END
-----------------------------------------------------------------------------------------------

--方法2
declare @str varchar(100) 
 set @str='Housing Battery DEMO'
----------------------------------------------------------------------------------------------
 declare @s varchar(8000) 
 declare tb cursor local for 
     select 'if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'') 
         print '' ['+b.name+'].['+a.name+']''' 
     from syscolumns a 
     inner join sysobjects b on a.id=b.id 
     inner join sysusers c on c.uid=b.uid and c.name='dbo' -- 如果只要 dbo 用户下的表
     where b.xtype='U' and a.status>=0 
         and a.xusertype in(175,239,231,167) 
 open tb 
 fetch next from tb into @s 
 while @@fetch_status=0 
 begin 
     exec(@s) 
     fetch next from tb into @s 
 end 
 close tb 
 deallocate tb


-------------------------------------------------------------------------------------------------------


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值