SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句

SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句,第1张

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如何查询一个数据库中的表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9471135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存