SQL Server中查询一个值出现的所有表。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server中查询一个值出现的所有表。相关的知识,希望对你有一定的参考价值。

如:我想查询出现'张三'这个值出现的所有表格.

参考技术A Create Procedure sp_Search(@Val Varchar(4000))
As
Begin
Declare @TBName Varchar(200)
Declare @ColName Varchar(200)
Declare @Rst int
Declare @Sql NVarchar(4000)
Declare @TB Table(TbName Varchar(200),ColName Varchar(200))

Declare myCur Cursor For
Select A.Name,B.Name From sys.objects A Inner join sys.columns B on a.object_id=b.object_id
Where A.Type='U' And system_Type_ID in(35,99,167,175,231,239)

Open myCur;

Fetch Next From myCur Into @TBName,@ColName
While @@FETCH_STATUS = 0
Begin
Set @Sql='If Exists(Select * From ['+@TBName+'] Where ['+@ColName+'] Like @Val)'
Set @Sql=@Sql+'Set @Rst=1 '
Set @Sql=@Sql+'Else '
Set @Sql=@Sql+'Set @Rst=0 '
Exec sp_Executesql @sql,N'@Val Varchar(4000),@Rst int output',@Val,@Rst output
If(@Rst=1)
Insert Into @TB values(@TBName,@ColName)
Fetch Next From myCur Into @TBName,@ColName
End
Close myCur
DeAllocate myCur

Select * From @TB
End
/*
测试:
Exec sp_search '内容'
Exec sp_search '%内容%'
以上搜索包含的字段数据类型为Char,Varchar,Text,NChar,NVarchar,NText
思路:
先查询出所有表所有字符型栏位,然后每个表每个栏位查询值是否等于@Val,如果等则保存表名和字段名,最后返回结果
*/
参考技术B select name from sysobjects where xtype like '%张三%' 参考技术C 按照思路,应该用存储过程来实现。

sql server 怎样用SQL语句查询一个数据库中的所有表?

1,利用sysobjects系统表 在这个表中,在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都有对应一行,我们在该表中筛选出xtype等于U的所有记录,就为数据库中的表了。 示例语句如下::

select * from sysobjects where xtype=‘U‘

注意:在SQL SERVER2005中,出现了sys.objects目录视图来代替sysobjects系统表,我们在SQL SERVER2005及以后的版本中,可以使用sysobjects系统表与sys.objects目录视图的任意对象来查询所有表。

2,利用sys.tables目录视图 sys.tables目录视图,为每个表对象返回一行. 示例语句如下:

select * from sys.tables

注意:sys.tables目录视图也只有在SQL SERVER2005及以上的版本中才能使用。

3,利用存储过程sp_tables sp_tables存储过程,可返回可在当前环境中查询的对象列表。这代表可在FROM子句中出现的任何对象。 我们可以执行如下语句:

exec sp_tables

在结果集中筛选出所有TABLE_TYPE等于TABLE的记录就是表信息了。

其他有用的系统功能

--读取库中的所有表名
select name from sysobjects where xtype=‘u‘
--读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype=‘u‘ and name=‘表名‘)
获取数据库表名和字段
sqlserver中各个系统表的作用
sysaltfiles 主数据库 保存数据库的文件
syscharsets 主数据库 字符集与排序顺序
sysconfigures 主数据库 配置选项
syscurconfigs 主数据库 当前配置选项
sysdatabases 主数据库 服务器中的数据库
syslanguages 主数据库 语言
syslogins 主数据库 登陆帐号信息
sysoledbusers 主数据库 链接服务器登陆信息
sysprocesses 主数据库 进程
sysremotelogins主数据库 远程登录帐号
syscolumns 每个数据库 列
sysconstrains 每个数据库 限制
sysfilegroups 每个数据库 文件组
sysfiles 每个数据库 文件
sysforeignkeys 每个数据库 外部关键字
sysindexs 每个数据库 索引
sysmenbers 每个数据库 角色成员
sysobjects 每个数据库 所有数据库对象
syspermissions 每个数据库 权限
systypes 每个数据库 用户定义数据类型
select 列名=name from syscolumns where id=object_id(N‘要查的表名‘)

以上是关于SQL Server中查询一个值出现的所有表。的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:SELECT 查询以获取 DISTINCT 和 MAX 显示顺序值

SQL Server进阶表表达式

sql查询数据库中有某个值的所有表

sql中查询同一列所有值出现的次数

sqlserver 表 无法更新和删除 子查询返回的值不止一个

在 SQL Server 中,如何从子查询中标识的表列名称中检索数据值?