SQL Server个人笔记(2)

#(SQL Server个人笔记2)

s0911数据库还原时-常见问题

Q1:System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.SmoExtended)
A1:目标数据库(B)还原时-点击确认按钮前一定要看一下 注意:服务器连接 谨慎关闭(关闭到目标数据库的现有连接方
–要考虑到会有那些后果,比如影响其他用户访问(因为此数据库所以连接都已关闭)

s0923删库

use master 
go 
declare @dbname sysname 
set @dbname = 'DB_demo' --填写无法删除的数据库名称

declare @s nvarchar(1000) 
declare tb cursor local 
for 
select s = 'kill ' + cast(spid as varchar) 
from master.dbo.sysprocesses 
where dbid = DB_ID(@dbname) 

open tb 
fetch next from tb into @s 
while @@fetch_status = 0 
begin 
exec (@s) 
fetch next from tb into @s 
end 
close tb 
deallocate tb 

exec ('drop database [' + @dbname + ']')

s0923删库方法2

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'YLD0917' --填写数据库名称,(msdb.dbo.sp_delete_database_backuphistory删除数据库备份和还原历史记录信息)
GO
USE [master]
GO
ALTER DATABASE [YLD0917] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE --设置库单用户模式,和设置立即回滚
GO
USE [master]
GO
DROP DATABASE [YLD0917]
GO

s0924查数据库各表数据量

--查数据库各表数据量
--先创建表

create table #t
	(
	name varchar(255), 
	rows bigint, 
	reserved varchar(20), 
	data varchar(20), 
	index_size varchar(20),
	 unused varchar(20)
	 )

exec sp_MSforeachtable "insert into #t exec sp_spaceused '?'"

--后查各个表的数据大小

select * from #t  order by rows desc

查数据库各表数据量2

CREATE TABLE #tablespaceinfo
    (
      nameinfo VARCHAR(500) ,
      rowsinfo BIGINT ,
      reserved VARCHAR(20) ,
      datainfo VARCHAR(20) ,
      index_size VARCHAR(20) ,
      unused VARCHAR(20)
    );  
  
DECLARE @tablename VARCHAR(255);  
  
DECLARE Info_cursor CURSOR
FOR
    SELECT  '[' + [name] + ']'
    FROM    sys.tables
    WHERE   type = 'U';  
  
OPEN Info_cursor;  
FETCH NEXT FROM Info_cursor INTO @tablename;  
  
WHILE @@FETCH_STATUS = 0
    BEGIN 
        INSERT  INTO #tablespaceinfo
                EXEC sp_spaceused @tablename;  
        FETCH NEXT FROM Info_cursor  
    INTO @tablename;  
    END; 
  
CLOSE Info_cursor;  
DEALLOCATE Info_cursor;  
  
--创建临时表
CREATE TABLE [#tmptb]
    (
      TableName NVARCHAR(MAX) ,
      DataInfo BIGINT ,
      RowsInfo BIGINT ,
      Spaceperrow AS ( CASE RowsInfo
                         WHEN 0 THEN 0
                         ELSE CAST(DataInfo AS DECIMAL(18, 2)) / CAST(RowsInfo AS DECIMAL(18, 2))
                       END ) PERSISTED
    );
 
--插入数据到临时表
INSERT  INTO [#tmptb]
        ( [TableName] ,
          [DataInfo] ,
          [RowsInfo]
        )
        SELECT  [nameinfo] ,
                CAST(REPLACE([datainfo], 'KB', '') AS BIGINT) AS 'datainfo' ,
                [rowsinfo]
        FROM    #tablespaceinfo
        ORDER BY CAST(REPLACE(reserved, 'KB', '') AS INT) DESC;  
 
 
--汇总记录
SELECT  [tbspinfo].* ,
        [tmptb].[Spaceperrow] AS '每行记录大概占用空间(KB)'
FROM    [#tablespaceinfo] AS tbspinfo ,
        [#tmptb] AS tmptb
WHERE   [tbspinfo].[nameinfo] = [tmptb].[TableName]
ORDER BY CAST(REPLACE([tbspinfo].[reserved], 'KB', '') AS INT) DESC;  
 
DROP TABLE [#tablespaceinfo];
DROP TABLE [#tmptb];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rinvay.xing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值