码迷,mamicode.com
首页 > 其他好文 > 详细

系统视图,系统表,系统存储过程的使用

时间:2017-06-10 16:53:17      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:nal   相关信息   重命名   href   post   delete   inf   update   val   



系统视图,系统表,系统存储过程的使用

获取数据库中用户表信息

1、获取特定库中全部用户表信息

select * from sys.tables

select * from sys.objects  where type=‘U‘  --用户表

第二条语句中当type=‘S‘时是系统表

2、获取表的字段信息

select * from sys.columns where object_id=object_id(表名)

select * from syscolumns where id=OBJECT_ID(表名)

3、获取当前库中表的字段及类型信息

1select 字段名=a.name,

             类型名=b.name,

             字段长度=a.max_length,

             參数顺序=a.column_id 

from sys.columns a left join sys.types b

on a.user_type_id=b.user_type_id

where object_id=object_id(表名)

syscolumnssys.columns表使用方法类似。

 

获取索引或主键信息

  1. 获取对象及相应的索引的信息

    select 对象名=A.name,

           对象类型=a.type,

           索引名=B.name,

           索引类型=case b.type when 1 then 聚集索引

                      when2 then 非聚集索引

                      when3 then ‘xml索引

                      else空间索引 end,

           主键否=case when b.is_primary_key=1 then 主键

                     else‘‘ end

    FROM sys.objects A JOIN sys.indexes B ON A.object_id=B.object_id

    WHERE A.type=‘U‘ AND B.name IS NOT NULL order by a.name

  2. 获取表的主键及相应的字段

    1select 表名=d.name ,主键名=a.name,字段名=c.name 

    from sys.indexes a join sys.index_columns b

    on a.object_id=b.object_id and a.index_id=b.index_id

    join sys.columns c on a.object_id=c.object_id and

     c.column_id=b.column_id

    join sys.objects d on d.object_id=c.object_id

    where a.is_primary_key=1

    2SELECT 表名=OBJECT_NAME(b.parent_obj),

           主键名=c.name,

           字段名=a.name   

    FROM syscolumns a,sysobjects b,sysindexes c,sysindexkeys d

    WHERE  b.xtype = ‘PK‘ AND b.parent_obj = a.id AND c.id = a.id

    AND b.name =c.name AND d.id = a.id

    AND d.indid = c.indid AND a.colid = d.colid

    3select 所属架构=s.name ,

           表名=t.name,

           主键名=k.name ,

           列名=c.name,

           键列序数=ic.key_ordinal

    from sys.key_constraints as k 

    join sys.tables as t   

    on t.object_id = k.parent_object_id 

    join sys.schemas as s   

    on s.schema_id = t.schema_id 

    join sys.index_columns as ic   

    on ic.object_id = t.object_id  

    and ic.index_id = k.unique_index_id 

    join sys.columns as c   

    on c.object_id = t.object_id  

    and c.column_id = ic.column_id where k.type = ‘pk‘;

    4)使用系统存储过程获取指定表的主键信息

    EXEC sp_pkeys 表名  --表名仅仅能是当前数据库下的单独表名不能带上架构名

  3. 查询哪些表创建了主键

    select 表名=a.name from

    (select name,object_id from sys.objects where type=‘u‘) a

    left join

    sys.indexes  b

    on a.object_id=b.object_id and b.is_primary_key=1

    where b.name is not null

    注:查询哪些表没有创建主键,将where条件改成 is null 就可以。

     

     

    查找视图信息

  1. 查看视图属性信息

    exec sp_help 视图名

  2. 查看创建视图脚本

    exec sp_helptext 视图名

  3. 查看当前数据库全部视图基本信息

    select * from sys.views

    select * from sys.objects where type=‘V‘

    select * from INFORMATION_SCHEMA.VIEWS

  4. 查看视图相应的字段及字段属性

    select 视图名=a.name,

           列名=b.name,

           字段类型=TYPE_NAME(b.system_type_id),

           字段长度=b.max_length

    from sys.views a join sys.columns b

    on a.object_id=b.object_id order by a.name

  5. 获取视图中的对象信息

    exec sp_depends 视图名

     

    查看存储过程信息

    1、基本信息

    select * from sys.procedures

    select * from sys.objects where type=‘P‘

2、查看存储过程创建文本

sp_helptext  存储过程名称

select text from syscomments where id=object_id (存储过程名称)

3、查看存储过程的參数信息

(1)select 參数名称 = name,

         类型 = type_name(xusertype),

         长度 = length,   

         參数顺序 = colid

   from    syscolumns

   where id=object_id(存储过程名称)

(2)select  參数名称 = name,

         类型 = type_name(system_type_id),

         长度 = max_length,   

         參数顺序 =parameter_id 

   from sys.parameters

   where object_id=object_id(存储过程名称)

 

返回当前环境中可查询的指定表或视图的列信息。

exec sp_columns 表名

select * from sys.columns where object_id=OBJECT_id(表名)

select * from sys.syscolumns where id=OBJECT_ID(表名)

select * from information_schema.columns where TABLE_NAME=表名

 

查询存储过程或函数的參数的具体信息

select * from sys.parameters where object_id=object_id(函数或存储过程名称)

 

获取全部数据库信息

1、获取数据库的基本信息

select name from sysdatabases order by name

2、获取某个数据库的文件信息

select * from [数据库名].[架构名].sysfiles

3、获取数据库磁盘使用情况

exec sp_spaceused

4、获取数据库中表的空间使用情况

IF OBJECT_ID(‘tempdb..#TB_TEMP_SPACE‘) IS NOT NULL DROP TABLE #TB_TEMP_SPACE

GO

CREATE TABLE #TB_TEMP_SPACE(

NAME VARCHAR(500)

,ROWS INT

,RESERVED VARCHAR(50)

,DATA VARCHAR(50)

,INDEX_SIZE VARCHAR(50)

,UNUSED VARCHAR(50)

)

GO

SP_MSFOREACHTABLE ‘INSERT INTO #TB_TEMP_SPACE execsp_spaceused ‘‘?‘‘‘

GO

SELECT *

FROM #TB_TEMP_SPACE

ORDER BY REPLACE(DATA,‘KB‘,‘‘)+0 DESC

 

获取触发器的相关信息

1、查看触发器定义及相关属性信息

1exec  sp_help 触发器名

2)查看表中指定类型的触发器的属性信息

exec sp_helptrigger [‘表名‘][,[‘触发器类型‘]]  

--參数2可选,省略參数2时返回该表中全部类型的触发器属性

2、获取触发器的创建脚本

   exec sp_helptext触发器名

3、查看表中禁用的触发器

select name from sys.triggers where parent_id=object_id(表名) and is_disabled=1

注:is_disabled=0时为启用的触发器。

4、获取触发器的父类名。触发器名。触发器状态和触发器类型信息

select 父类名=a.name,

       对象类型=a.type,

       触发器名=b.name,

       触发器状态=case when b.is_disabled=1 then禁用 else 启用end,

       触发器类型=case when b.is_instead_of_trigger=1 then ‘instead of‘ else ‘after‘ end

from sys.objects a join sys.triggers b on a.object_id=b.parent_id

注:查询单个表或视图的触发器信息加上a.object_id=object_id(表名)条件。

5、禁用和启用触发器命令

禁用:alter table表名disable trigger触发器名

启用:alter table表名enable trigger触发器名

注:禁用或启用多个触发器,触发器名之间用逗号隔开

    禁用或启用表中所有触发器。将触发器名换成ALL

6、指定第一个或最后一个触发的after触发器。

exec sp_settriggerorder 触发器名,运行顺序,触发事件

查询触发触发器的相应事件

select * from sys.trigger_events where object_id=object_id(触发器名)

7、重命名触发器

exec sp_rename 旧名,新名

 

 

 

SQL语句创建登录名,数据库用户,数据库角色及分配权限

使用到的存储过程解释说明:

sp_addlogin 新增登录账号存储过程

语法:sp_addlogin [@loginame = ] ‘login‘   --登录名

              [ , [ @passwd = ] ‘password‘ ] -–登陆password

             [ , [ @defdb = ] ‘database‘ ]   --默认数据库

             [ , [ @deflanguage = ]‘language‘ ]  --默认语言

             [ , [ @sid = ] sid ]       --安全标识号

              [ , [ @encryptopt= ]‘encryption_option‘ ] –password传输方式

sp_grantlogin 创建sql server 登录名

语法:sp_addlogin [ @loginame = ] ‘login‘     --登录名

sp_droplogin 删除登录帐号存储过程

语法:sp_droplogin  [@loginame = ] ‘login‘   --登录名

sp_grantdbaccess  将数据库用户加入到当前数据库

语法sp_grantdbaccess [@loginame = ] ‘login‘  --登录名

       [ , [ @name_in_db = ] ‘name_in_db‘ [ OUTPUT ]]  --数据库username

sp_addrole  创建数据库角色

语法:sp_addrole [ @rolename = ] ‘role‘ –角色名

[ , [ @ownername = ] ‘owner‘ ]  --角色全部者

sp_addrolemember  为角色加入成员

语法sp_addrolemember [ @rolename = ] ‘role‘,  --角色名

            [ @membername = ] ‘security_account‘  --成员用户

sp_droprolemember  删除角色成员

sp_helprole [ [ @rolename = ] ‘role‘ ]

返回当前数据库中有关角色的信息

1创建登录名

(1)exec sp_addlogin 登录名,password,默认数据库

(2)create login 登录名 with password=密码,default_database=默认数据库

2、为指定登录名为创建指定数据库上的用户

use 指定数据库

(1)execute sp_grantdbaccess 登录名,用户

(2)create user username for login 登录名

3授予用户拥有表的权限

grant 权限 on 对象 to 用户

4加入数据库角色

execute sp_addrole 角色名

create role 角色名 authorization 拥有新角色的数据库用户或角色

5加入角色的成员

execute sp_addrolemember 角色名,username

6设置角色拥有对象的权限

grant 权限 on 对象名 to 角色名

--=================================================================

创建用户并分配权限

--新增登录名

create login administor with password=‘123‘,default_database=Mail

--新增用户

use Mail

create user admins for login administor

--为用户分配权限

grant select on A_Area to admins

--取消分配的权限

revoke select on A_Area to admins

--新增角色

create role ins

--为角色分配权限

grant select on A_MailZT to ins with grant option

--删除角色对表A_MailZT的查询权限

revoke select on a_mailzt to ins CASCADE

--加入角色ins成员admins

exec sp_addrolemember ‘ins‘,‘admins‘

--删除角色ins成员admins

exec sp_droprolemember ‘ins‘,‘admins‘

--删除角色

drop role ins   --必须先删除角色中全部成员

--删除用户

drop user admins

--删除登录账户

drop login administor

--==================================================================

查看数据库关于权限的信息

--查询当前数据库角色信息

exec sp_helprole 角色名

--提供有关每一个数据库中的登录及相关用户的信息

exec sp_helplogins 登录名

--报告有关当前数据库中数据库级主体的信息。

exec sp_helpuser 当前数据库用户或角色名

--返回有关当前数据库中某个角色的成员的信息

exec sp_helprolemember 角色名

--返回SQLServer 固定server角色的列表

exec sp_helpsrvrole 固定server角色名

 

sql数据库批量分配权限

declare @sql varchar(max)=‘‘

select @sql=@sql+‘grant insert on ‘+ name + ‘ to admins ‘+CHAR(10) from sysobjects where name like ‘a_%‘

exec (@sql)

 

????怎样创建windows用户登录????

 

 

备份和还原数据库

1、创建备份设备

sp_addumpdevice [ @devtype = ] ‘device_type‘   --备份设备类型

        , [@logicalname = ] ‘logical_name‘   --备份设备逻辑名称

        , [@physicalname = ] ‘physical_name‘ –物理名称

EXEC sp_addumpdevice ‘disk‘, ‘mydiskdump‘, ‘d:\dump1.bak‘;

注:加入逻辑名为mydiskdump物理名为dump1.bak disk类型的备份设备

2、删除备份设备

sp_dropdevice [ @logicalname = ] ‘device‘   --备份设备逻辑名称

        [ , [ @delfile = ] ‘delfile‘ ]  --指定物理备份设备文件是否应删除

exec sp_dropdevice ‘mydiskdump‘,‘delfile‘;

注:參数‘delfile‘不选时仅仅将备份设备的逻辑名从数据库引擎中删除,并删除相应master..sysdevices表中的项。有參数时会同一时候删除相应的物理备份设备的文件。

  1. 查询数据库引擎中备份设备的信息

    select * from master..sysdevices

    select * from sys.backup_devices

  2. 备份数据库

    backup database mail to disk=备份文件

    backup database 数据库名 to 备份设备

  3. 数据恢复

     

数据库快照恢复

----------------------------------创建数据库DemoDB

create database DemoDB

on primary

(name=‘DemoDB_data‘,filename=‘d:\Demodb_log.mdf‘,size=5MB,maxsize=10MB)

log on

(name=‘DemoDB_log‘,filename=‘d:\Demodb_log.ldf‘,size=2MB,maxsize=10MB)

go

-------------------------------------DemoDB创建数据表T1T2

use DemoDB

create table T1(id int,name char(8),address char(13))

go

create table T2(id int,name char(8),address char(13))

go

---------------------------------------DemoDB数据库的T1T2插入数据

use DemoDB

Insert into T1 values(1,‘jacky‘,‘suzhou‘)

Insert into T1 values(2,‘Hellen‘,‘shanghai‘)

Insert into T2 values(1,‘Tom‘,‘beijing‘)

Insert into T2 values(2,‘Alice‘,‘hangzhou‘)

Go

--------------DemoDB数据库创建数据库快照DemoDB_dbsnapshot_200510201600

create database DemoDB_dbsnapshot_200510201600

on

(name=‘DemoDB_data‘,filename=‘d:\DemoDB_dbsnapshot_201203091700.mdf‘)

as snapshot of DemoDB

go

----------------------------------------在数据库快照和数据库中查询T1T2

use DemoDB_dbsnapshot_200510201600

select * from dbo.T1

select * from dbo.T2

go

use DemoDB  --在数据库中查看表T1T2

select * from dbo.T1

select * from dbo.T2

go

---------------------------------------------在数据库中改动T1T2

use DemoDB

update T1

set name=‘Tony‘ where id=1   --DemoDB中更新数据

go

delete from T1 where id=2    --DemoDB中删除数据

go

drop Table T2     --删除T2

go

------------------------------在数据库快照和数据库中查询T1T2

use DemoDB_dbsnapshot_200510201600

select * from T1

select * from T2

go

use DemoDB

select * from T1

select * from T2

go

------------------使用数据库快照还原在DemoDB数据库的T1表误删除和更新的数据

update DemoDB.dbo.T1

set name=(select name from DemoDB_dbsnapshot_200510201600.dbo.T1 where id=1) where id=1

go

insert into DemoDB.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1 where id=2

go

----------------------------使用数据库快照还原在DemoDB数据库误删除的T2

use DemoDB

--复制进剪贴板中的创建T2的语句

go

  select *into DemoDB.dbo.T2 from DemoDB_dbsnapshot_200510201600.dbo.T2

go

------------------------------------在数据库快照和数据库中查询T1T2

use DemoDB

select * from T1

select * from T2

go

use DemoDB_dbsnapshot_200510201600

select * from T1

select * from T2

go

------------------------------------------

--注:假设须要周期创建快照,能够创建作业

------------------------------------------DemoDB中更新数据

use DemoDB

update T1 set name=‘Funny‘ where id=1

go

-----------------------------------------数据库快照和数据库中查询T1T2

select * from Demodb.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T2

----------------------------------------DemoDB中更新数据

use DemoDB

update T1 set name=‘Bob‘ where id=1

go

----------------------------------数据库快照和数据库中查询T1T2

select * from Demodb.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T2

 

-----------------------------------------------

 

/*使用数据库快照还原整个数据库*/

 

-------------------------------------------使用数据库快照恢复DemoDB数据库

use master

restore Database DemoDB from Database_snapshot=‘DemoDB_dbsnapshot_200510201600‘

-------------------------------------------

select * from DemoDB.dbo.T1

select * from DemoDB_dbsnapshot_200510201600.dbo.T1

-------------------------------------------

use master

drop database DemoDB_dbsnapshot_200510201600   --删除数据库快照

drop Database DemoDB         --删除数据库

 


转载自:http://wenku.baidu.com/link?url=2TnLqDON6Lv_xY9j800t98axR_wswnGCepl8SPeMaaDtaKSSJKFXaR4Z2M0DS3Fd1udxmKLEkN7zX5kC79tUr1l6BU4p5uho5a3KszdrdbK

系统视图,系统表,系统存储过程的使用

标签:nal   相关信息   重命名   href   post   delete   inf   update   val   

原文地址:http://www.cnblogs.com/claireyuancy/p/6978895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!