全球主机交流论坛

标题: 想在mssql查询一条数据..在哪里个表里,.这句子怎样写 [打印本页]

作者: vpswz    时间: 2018-8-20 15:03
标题: 想在mssql查询一条数据..在哪里个表里,.这句子怎样写
如查询 张三
在mssql 里 "饭堂" 数据库里有N个表...我想知道张三在哪几个表出现了,这句子怎样写?
作者: 某某人    时间: 2018-8-20 15:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: my6360    时间: 2018-8-20 15:47
等于要查询整个数据库?不可能吧
作者: funders    时间: 2018-8-20 15:56
本帖最后由 funders 于 2018-8-20 15:59 编辑

我知道 但是没有金币就不告诉你
算了 不要金币了

  1. declare @key varchar(30)
  2. set @key = 'admin' --要查找的字符串
  3. declare @tabName varchar(40),@colName varchar(40)
  4. declare @sql varchar(2000)
  5. declare @tsql varchar(8000)
  6. declare tabCursor cursor for
  7. select name from sysobjects where xtype = 'u' AND name <> 'dtproperties' --查询所有用户表的名称
  8. open tabCursor
  9. fetch NEXT from tabCursor into @tabName
  10. while @@fetch_status = 0
  11. begin
  12. set @tsql = ''
  13. declare colCursor cursor for
  14. select name from SysColumns where id=Object_Id(@tabName) and xtype=167 and length=50 --查询所有用户表的列名称
  15. open colCursor
  16. fetch NEXT from colCursor into @colName
  17. while @@fetch_status = 0
  18. begin
  19. set @sql = 'if(exists(select * from ' + @tabName + ' where '
  20. set @sql = @sql + @colName + ' like ''%' + @key + '%'')) begin select * from '
  21. set @sql = @sql + @tabName + ' where ' + @colName + ' like ''%' + @key + '%'';select '''
  22. + @tabName + ''' as TableName end'
  23. set @tsql = @tsql + @sql + ';'
  24. fetch NEXT from colCursor into @colName
  25. end
  26. exec(@tsql)
  27. close colCursor
  28. deallocate colCursor
  29. fetch NEXT from tabCursor into @tabName
  30. end
  31. close tabCursor
  32. deallocate tabCursor
复制代码


不用谢
作者: wcg928    时间: 2018-8-20 16:13
funders 发表于 2018-8-20 15:56
我知道 但是没有金币就不告诉你
算了 不要金币了

大佬啊..真是可爱
作者: vpswz    时间: 2018-8-20 16:27
funders 发表于 2018-8-20 15:56
我知道 但是没有金币就不告诉你
算了 不要金币了


谢了...

700多个表....

我刚用写了个工具穷举...

“bw_tab_fielddesc”, 用时75秒

作者: vpswz    时间: 2018-8-20 16:29
funders 发表于 2018-8-20 15:56
我知道 但是没有金币就不告诉你
算了 不要金币了

刚试了..没有返回结果 就一句 命令已成功完成。

这个要怎样搞

作者: newyoung    时间: 2018-8-20 16:32
这个操作很皮啊。  初期把数据库结构给做丑了吗?
作者: funders    时间: 2018-8-20 16:34
vpswz 发表于 2018-8-20 16:29
刚试了..没有返回结果 就一句 命令已成功完成。

这个要怎样搞

不应该啊,把脚本里admin替换成你要找的字符串,我之前用这个绝对可以的
作者: vpswz    时间: 2018-8-20 16:42
funders 发表于 2018-8-20 16:34
不应该啊,把脚本里admin替换成你要找的字符串,我之前用这个绝对可以的

(, 下载次数: 0)
作者: funders    时间: 2018-8-20 17:52
vpswz 发表于 2018-8-20 16:42




  1. USE 数据库名
  2. GO

  3. DECLARE @key VARCHAR(30)
  4. SET @key = 'admin'
  5. DECLARE @tabName VARCHAR(40),@colName VARCHAR(40)
  6. DECLARE @sql VARCHAR(2000)
  7. DECLARE @tsql VARCHAR(8000)

  8. DECLARE tabCursor CURSOR FOR
  9. SELECT name FROM sysobjects WHERE xtype = 'u' AND name <> 'dtproperties'
  10. OPEN tabCursor
  11. FETCH NEXT FROM tabCursor INTO @tabName
  12. WHILE @@fetch_status = 0
  13. BEGIN
  14.         SET @tsql = ''
  15.         DECLARE colCursor CURSOR FOR
  16.         SELECT Name FROM SysColumns WHERE id=Object_Id(@tabName) and xtype=167
  17.         OPEN colCursor
  18.         FETCH NEXT FROM colCursor INTO @colName
  19.         WHILE @@fetch_status = 0
  20.         BEGIN
  21.                 SET @sql = 'if(exists(select * from ' + @tabName + ' where '
  22.                 SET @sql = @sql + @colName + ' like ''%' + @key + '%'')) begin  select * from '
  23.                 SET @sql = @sql + @tabName + ' where ' + @colName + ' like ''%' + @key + '%'';select '''
  24.                 + @tabName + ''' as TableName  end'
  25.                 SET @tsql = @tsql + @sql + ';'
  26.                
  27.                 FETCH NEXT FROM colCursor INTO @colName
  28.         END
  29.         EXEC(@tsql)
  30.         CLOSE colCursor
  31.         DEALLOCATE colCursor
  32.        
  33.         FETCH NEXT FROM tabCursor INTO @tabName
  34. END
  35. CLOSE tabCursor
  36. DEALLOCATE tabCursor
复制代码


你再到其他库试试?




欢迎光临 全球主机交流论坛 (https://mjj.022333.xyz/) Powered by Discuz! X3.4