现在的位置: 首页 > 综合 > 正文

在整个数据库中查找一个值

2013年05月23日 ⁄ 综合 ⁄ 共 1142字 ⁄ 字号 评论关闭

在整个数据库中查找一个值
2011-07-11 14:02
 在整个数据库中查找一个
方法一:PLSQL 块实现<缺点:游标执行时逐行SELECT,效率不好>

--Select '['+name+']' from master.dbo.sysdatabases order by name 数据库

declare @sele varchar(500)
    declare Ctable_name cursor for
   select table_name,column_name from information_schema.columns
    open Ctable_name
    declare @tablename varchar(50)
    declare @columnname varchar(50)
   fetch next from Ctable_name
       into @tablename,@columnname
    while (@@FETCH_STATUS = 0)
    begin
    print @tablename
   select  @sele = ' select  *  from '+ @tablename+
          '  where  '+ @columnname +' = N''0024'''
    exec (@sele)
   
        fetch next from Ctable_name
          into @tablename,@columnname
    end
    close Ctable_name
    deallocate Ctable_name

方法二: BAT或者Shell脚本,

v1=$1
sqlcmd -E -d trident1 -Q "SELECT 'SELECT '+''''+TABLE_NAME+'.'+COLUMN_NAME+''''+' AS NAME FROM dbo.'+TABLE_NAME+' WHERE CONVERT(varchar,['+COLUMN_NAME+'])='+''''+'$v1'+''''+' UNION ' FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE IN ('int','bigint','smallint','tinyint','char','nvarchar','varchar')
UNION ALL SELECT TOP 1 'SELECT TOP 0 NAME FROM sys.objects' FROM sys.objects"|sed 's/([0-9]\{1,5\} rows affected)//' >temp.txt
attrib +H temp.txt
sqlcmd -E -d trident1 -i temp.txt
rm temp.txt

BAT 需要将V1=$1处改成Bat传参方法

抱歉!评论已关闭.