第一次回答:
写存储过程或者函数来做。
第二次回答:
过程如下,你还可以完善一下
create procedure get_table
@colname varchar(30),
@colvalue varchar(30),
@coltype varchar(30)=null,
@colformat varchar(30)=null
as
begin
declare @sql varchar(100), @tablename varchar(30)
create table #tables( tablename varchar(30))
declare cur_table cursor for
select name from sysobjects a
where type = 'U' and uid = 1 and exists( select 1 from syscolumns b where bid = aid and bname = @colname)
open cur_table
fetch cur_table into @tablename
WHILE @@FETCH_STATUS = 0 begin
select @sql = 'insert into #tables select'''+ @tablename +''' where exists( select 1 from '+ @tablename +' where '+ @colname +' = '''+ @colvalue +''')'
exec(@sql)
fetch cur_table into @tablename
end
close cur_table
deallocate cur_table
select from #tables
end
go
exec get_table 'name', '张三'
第三次回答:
这个过程我在SQL server 2005中执行过了,没有问题,而且这语法也在2000中适用。
过程,我写了几次,或许你看得是开始我写的,那有错,后来更正了。
如果报错,请把错误贴出来。
第四次回答:
你要把你的过程及语句,贴出来嘛,或者说明没有改动,完全按照我的,那你也得把你的SQL语句贴出来吧?
然后,你说:
报错如下,我是新手 麻烦大家了:
(所影响的行数为 0 行)
服务器: 消息 105,级别 15,状态 1,行 1
字符串 '张' 之前有未闭合的引号。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '张' 附近有语法错误。
(所影响的行数为 0 行)
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。
为什么有那么多报错?是否执行了一次语句就报了你列出的所有错误?
务必把你的语句贴出来。像我第三次回答一样,建立过程的语句(如果你没有改,则不需要列出只需要说明,没有改即可),及执行过程的语句(如果你没有改,则不需要列出只需要说明,没有改即可)。
第四次回答:
你重新执行一遍一下语句:
选中到“--到这里结束”的语句,一次执行。
drop procedure get_table
go
create procedure get_table
@colname varchar(30),
@colvalue varchar(30),
@coltype varchar(30)=null,
@colformat varchar(30)=null
as
begin
declare @sql varchar(100), @tablename varchar(30)
create table #tables( tablename varchar(30))
declare cur_table cursor for
select name from sysobjects a
where type = 'U' and uid = 1 and exists( select 1 from syscolumns b where bid = aid and bname = @colname)
open cur_table
fetch cur_table into @tablename
WHILE @@FETCH_STATUS = 0 begin
select @sql = 'insert into #tables select'''+ @tablename +''' where exists( select 1 from '+ @tablename +' where '+ @colname +' = '''+ @colvalue +''')'
exec(@sql)
fetch cur_table into @tablename
end
close cur_table
deallocate cur_table
select from #tables
end
go
exec get_table 'name, '张三'
--到这里结束
如果仍有问题,那么执行以下语句:
create table #tables( tablename varchar(30))
insert into #tables select aname from sysobjects a
where type = 'U' and uid = 1 and exists( select 1 from syscolumns b where bid = aid and bname = 'name')
select from #tables
drop table #tables
可以把所有包含字段'name'的表找出来,你自己再仔细研究,使用exec( SQL)的方式 SQL2000也是支持的,实在不行,你就找到表后,自己一个一个表再select也可以得到结果:
select count(1) from tablename where name = '张三'
结果大于零就说明这个表是你要找的表之一了。
自己研究下吧。
当我们建立Sql Server 连接之后,可以通过如下语句得到当前Sql server中所有的数据的名称:
use master
select [name] from [sysdatabases] order by [name]
go
我们通过查询其中一个数据库aspnetpager,就可以得到这个数据库中的所有的表名了,语句如下:
use aspnetpager
select [id], [name] from [sysobjects] where [type] = 'u' order by [name]
怎样用SQL语句查询一个数据库中的所有表
--读取库中的所有表名
select name from sysobjects where xtype='u'
--读取指定表的所有列名
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')
--读取库中的所有表名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如何查询一个数据库中的表全部的内容,包括:SQL如何查询一个数据库中的表、如何查询一个SqlServer数据库中有哪些表格、怎样用SQL语句查询一个数据库中的所有表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)