SQL SERVER库使用语句合集

SQL SERVER库使用语句合集

  1. 查看视图的创建语句
sp_helptext '视图名称';

或者

select text from syscomments s1 join sysobjects s2 on s1.id=s2.id where name='视图名称';
  1. 查询指定库的所有用户
use 指定库
select name,type_desc from sys.database_principals;
  1. 创建用户操作:
1、进入master库:  
use [master];                                                   
select * from sys.sql_logins;    --查询所有login用户                               
																								                
drop user IF EXISTS 用户名                                      
DROP LOGIN  用户名(master中是drop login)                      
																								                
CREATE LOGIN [用户名] WITH PASSWORD='xxxxxx';         
																								                
2、进到指定库                                            
use [指定库];                                              
CREATE USER 用户名                                              
	FOR LOGIN 用户名                                              
	WITH DEFAULT_SCHEMA = [dbo]                                   
3、赋权(在指定库)                                        
ALTER ROLE db_ddladmin ADD MEMBER [用户名]; 		                
ALTER ROLE db_datareader ADD MEMBER [用户名];                   
ALTER ROLE db_datawriter ADD MEMBER [用户名];                   
																						                    
drop user IF EXISTS 用户名                                      
select * from [sys].[database_principals] where name='用户名';  

如果为Microsoft asure sqlserver创建用户:

use master;
create login 用户名 with password='fH)f3@MFepA(UjL7';
CREATE USER CNSDCDLRW	FOR LOGIN CNSDCDLRW	WITH DEFAULT_SCHEMA = [dbo]
use 指定库;
create user user名称 from login login用户名;
exec sp_addrolemember 'db_datareader','用户名';

  1. 查看当前登录用户
select spid,db_name(dbid) as DBname,login_time ,last_batch ,status ,hostname ,program_name ,loginame   
from sys.sysprocesses 
where spid >50
and loginame <> 'DESKTOP-ABCD\Administrator'
--and dbid in (select dbid from master.dbo.sysdatabases where name ='库名')
order by last_batch desc
  1. 查看当前连接数据库的连接
sp_who2
  1. 查询未提交的事务
USE master
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT es.session_id, es.login_name, es.host_name, est.text
, cn.last_read, cn.last_write, es.program_name
FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_tran_session_transactions st --系统里还存在的事务
ON es.session_id = st.session_id
INNER JOIN sys.dm_exec_connections cn
ON es.session_id = cn.session_id
CROSS APPLY sys.dm_exec_sql_text(cn.most_recent_sql_handle) est
LEFT OUTER JOIN sys.dm_exec_requests er
ON st.session_id = er.session_id

AND er.session_id IS NULL
  1. 查看正在执行的sql语句
SELECT  
der.[session_id],der.[blocking_session_id],  
sp.lastwaittype,sp.hostname,sp.program_name,sp.loginame,  
der.[start_time] AS '开始时间',  
der.[status] AS '状态',  
dest.[text] AS 'sql语句',  
DB_NAME(der.[database_id]) AS '数据库名',  
der.[wait_type] AS '等待资源类型',  
der.[wait_time] AS '等待时间',  
der.[wait_resource] AS '等待的资源',  
der.[logical_reads] AS '逻辑读次数'  
FROM sys.[dm_exec_requests] AS der  
INNER JOIN master.dbo.sysprocesses AS sp ON der.session_id=sp.spid  
CROSS APPLY  sys.[dm_exec_sql_text](der.[sql_handle]) AS dest  
--WHERE [session_id]>50 AND session_id<>@@SPID  
ORDER BY der.[session_id]  
GO 
  1. 是否有死锁
 --drop table #deadlock

CREATE TABLE #deadlock(LogDate DATETIME,ProcessInfo VARCHAR(20),Text VARCHAR(2000))  
go  
INSERT INTO #deadlock EXEC xp_readerrorlog 0,1,'deadlock victim',NULL,'2016-07-20 14:00:00','2016-07-30','DESC'    
go 
  1. 是否堵塞
SELECT spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran 
,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text 
FROM master.dbo.sysprocesses p CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) s 
WHERE blocked > 0 OR spid IN(SELECT blocked FROM master.dbo.sysprocesses WHERE blocked > 0) 
go
  1. 给数据库重命名操作
一、右键数据库名,选择 “属性”,然后会弹出一个页面,选择左侧的 “选项”按钮,然后在右侧找到 “状态” 栏下的 “限制访问”,将 “限制访问”的值改为 “SINGLE_USER”,然后点击下方的 “确定” 按钮

二、使用 master 权限 执行以下 SQL 语句:

         Exec sp_renamedb'dbold','dbnew'
         go

     其中,dbold为原来的数据库名,dbnew 为新的数据库名

三、1. 执行以下SQL语句把数据库相关进程杀掉:

        USE master; 
        GO 
        DECLARE @SQL VARCHAR(3000);
        SET @SQL = '';
        SELECT @SQL = @SQL+'; KILL ' + RTRIM(SPID)
        FROM [sys].[sysprocesses] AS sps
        WHERE [sps].[dbid] = DB_ID('dbname'); 
        SET @SQL = SUBSTRING(@SQL, 2, LEN(@SQL));
        EXEC(@SQL);
        GO

      其中,dbname 为新的数据库名,即在第二步中修改后的新数据库名

2. 执行以下SQL语句,把数据库权限由单用户设置为多用户:

    ALTER DATABASE [dbname] SET MULTI_USER;--设置为多用户模式

其中,dbname 为新的数据库名,即在第二步中修改后的新数据库名,与第三步中的数据库名一致
  1. 获取所有数据库下所有权限的脚本
create table master.dbo.yomi(dbname nvarchar(100),databaseusername nvarchar(100),role nvarchar(50)); ---yomi为我创建的临时储存表

EXEC sp_MSforeachdb
@command1 = '
use [?];
if db_name() not in (''master'',''model'',''msdb'',''tempdb'')
BEGIN

insert into master.dbo.yomi
SELECT [dbname]=db_name(),
[DatabaseUserName] = memberprinc.[name], 
[Role] = roleprinc.[name]
FROM  
sys.database_role_members members 
JOIN 
sys.database_principals roleprinc ON roleprinc.[principal_id] = members.[role_principal_id] 
JOIN 
sys.database_principals memberprinc ON memberprinc.[principal_id] = members.[member_principal_id] 
LEFT JOIN 
sys.login_token ulogin on memberprinc.[sid] = ulogin.[sid] 
LEFT JOIN   
sys.database_permissions perm ON perm.[grantee_principal_id] = roleprinc.[principal_id] 
LEFT JOIN 
sys.columns col on col.[object_id] = perm.major_id 
       AND col.[column_id] = perm.[minor_id] 
LEFT JOIN 
sys.objects obj ON perm.[major_id] = obj.[object_id] where memberprinc.sid in (select sid from master.sys.server_principals where type_desc  in (''SQL_LOGIN'',''WINDOWS_GROUP'',''WINDOWS_LOGIN''))
END
'


select distinct 'use ['+dbname+'];'+'CREATE user ['+databaseusername+'] for login ['+databaseusername+'];' from
 master.dbo.yomi where databaseusername not in ('dbo','zcloud_bk');

select 'use ['+dbname+'];'+'EXEC sp_addrolemember '''+role+''' ,'''+databaseusername+''';' from 
 master.dbo.yomi where databaseusername not in ('dbo','zcloud_bk') order by dbname;
 

//select * from  master.dbo.yomi where  dbname='库名' and databaseusername not in ('dbo','zcloud_bk') order by dbname;//这个是查找指定库的所有用户的权限

drop table master.dbo.yomi;
  1. 更新数据库的统计信息
USE 库名;      
GO      
EXEC sp_updatestats; 
  1. 查看用户的权限
SELECT 
    dbuser.name AS UserName,
    ISNULL(dbrole.name, 'Public') AS RoleName
FROM 
    sys.database_principals AS dbuser
LEFT JOIN 
    sys.database_role_members AS dbrolemembers ON dbuser.principal_id = dbrolemembers.member_principal_id
LEFT JOIN 
    sys.database_principals AS dbrole ON dbrolemembers.role_principal_id = dbrole.principal_id
WHERE 
    dbuser.type_desc = 'SQL_USER'
    AND dbuser.name = 'CNSDFDP_FOR_FDP_PROD' -- 替换为你要查询的用户名

后续待补充~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值