1、查询SQL中的所有表:
Select
TABLE_NAME
FROM
数据库名称INFORMATION_SCHEMATABLES
Where
TABLE_TYPE='BASE
TABLE'
执行之后,就可以看到数据库中所有属于自己建的表的名称
2、查询SQL中所有表及列:
Select
dbosysobjectsname
as
Table_name,
dbosyscolumnsname
AS
Column_name
FROM
dbosyscolumns
INNER
JOIN
dbosysobjects
ON
dbosyscolumnsid
=
dbosysobjectsid
Where
(dbosysobjectsxtype
=
'u')
AND
(NOT
(dbosysobjectsname
LIKE
'dtproperties'))
3、在Sql查询分析器,还有一个简单的查询方法:
EXEC
sp_MSforeachtable
@command1="sp_spaceused
''"
执行完之后,就可以看到数据库中所有用户表的信息
4、查询总存储过程数:
select
count()
总存储过程数
from
sysobjects
where
xtype='p'
D
=
默认值或
DEFAULT
约束
F
=
FOREIGN
KEY
约束
L
=
日志
FN
=
标量函数
IF
=
内嵌表函数
P
=
存储过程
PK
=
PRIMARY
KEY
约束(类型是
K)
RF
=
复制筛选存储过程
S
=
系统表
TF
=
表函数
TR
=
触发器
U
=
用户表
UQ
=
UNIQUE
约束(类型是
K)
V
=
视图
X
=
扩展存储过程
使用OPENROWSET,例子如下
SELECT
FROM OPENROWSET('SQLOLEDB','数据B的IP地址';'连接数据库B的账号';'连接数据库B的账号',
'SELECT FROM Bdbo表名 ) AS a
第一次回答:
写存储过程或者函数来做。
第二次回答:
过程如下,你还可以完善一下
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如何查询第一个数据的方法。
如下参考:
1首先,双击“ManagementStudio”图标打开SQLServer。
2继续打开SQLServer窗口,单击工具栏中的“newquery”图标。
3在SQLServer第二窗口,输入来自SQL语句的查询数据到SQLServer数据库。
4然后在SQLServer窗口,单击工具栏中的“execute”图标。
5最后,在SQLServer窗口中,成功地显示了SQLServer数据库中的查询数据结果。
查询所有数据库占用磁盘空间大小的SQL语句:
复制代码
代码如下:
select
TABLE_SCHEMA,
concat(truncate(sum(data_length)/1024/1024,2),'
MB')
as
data_size,
concat(truncate(sum(index_length)/1024/1024,2),'MB')
as
index_size
from
information_schematables
group
by
TABLE_SCHEMA
order
by
data_length
desc;
查询单个库中所有表磁盘占用大小的SQL语句:
复制代码
代码如下:
select
TABLE_NAME,
concat(truncate(data_length/1024/1024,2),'
MB')
as
data_size,
concat(truncate(index_length/1024/1024,2),'
MB')
as
index_size
from
information_schematables
where
TABLE_SCHEMA
=
'TestDB'
group
by
TABLE_NAME
order
by
data_length
desc;
以上语句测试有效,注意替换以上的TestDB为数据库名
所有用户表都存放在数据库中的系统对象表sysobjects中。
笔者以个人专用数据库为例:
select
from sysobjects --系统对象表
where xtype = 'U' --U表示所有用户表
执行后影响的行数为180(rows),如下图:
补充说明:另两个与之相关的系统对象表为(附下图)
1)syscolumns :数据表列名清单表;
2)systypes:各列数据类型表。
以上就是关于SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句全部的内容,包括:SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句、查询另一个数据库的sql语句、SQL如何查询一个数据库中的表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)