自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)庫干貨:整理SQL Server非常實用的腳本

數(shù)據(jù)庫 SQL Server
今天給大家分享自己在工作當(dāng)中用到的SQLServer一些常用的腳本,希望能對大家有所幫助!

[[358579]]

今天給大家分享自己在工作當(dāng)中用到的SQLServer一些常用的腳本,希望能對大家有所幫助!

1、 查詢數(shù)據(jù)庫所有表結(jié)構(gòu)

通過該腳本可以快速查找表字段,或者生成數(shù)據(jù)庫設(shè)計文檔、進(jìn)行數(shù)據(jù)庫對比。

 

  1. SELECT obj.name 表名, 
  2. col.colorder AS 序號 , 
  3. col.name AS 列名 , 
  4. ISNULL(ep.[value], ''AS 列說明 , 
  5. t.name AS 數(shù)據(jù)類型 , 
  6. CASE WHEN col.isnullable = 1 THEN '1' 
  7. ELSE '' 
  8. END AS 允許空 , 
  9. ISNULL(comm.text, ''AS 默認(rèn)值, 
  10. Coalesce(epTwo.value, ''AS documentation 
  11. FROM dbo.syscolumns col 
  12. LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype 
  13. inner JOIN dbo.sysobjects obj ON col.id = obj.id 
  14. AND obj.xtype = 'U' 
  15. AND obj.status >= 0 
  16. LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id 
  17. LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id 
  18. AND col.colid = ep.minor_id 
  19. AND ep.name = 'MS_Description' 
  20. LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id 
  21. AND epTwo.minor_id = 0 
  22. AND epTwo.name = 'MS_Description' 
  23. WHERE obj.name in
  24. SELECT 
  25. ob.name  
  26. FROM sys.objects AS ob 
  27. LEFT OUTER JOIN sys.extended_properties AS ep 
  28. ON ep.major_id = ob.object_id 
  29. AND ep.class = 1 
  30. AND ep.minor_id = 0 
  31. WHERE ObjectProperty(ob.object_id, 'IsUserTable') = 1  
  32. ORDER BY obj.name ; 

2、SQLServer 查詢數(shù)據(jù)庫各個數(shù)據(jù)表、索引文件占用的存儲空間

可以快速查詢數(shù)據(jù)庫中表、索引占用的存儲空間,找到哪些表占用了大量的存儲空間,便于進(jìn)行數(shù)據(jù)庫優(yōu)化。

 

  1. CREATE PROCEDURE [dbo].[sys_viewTableSpace] 
  2. AS  
  3.  
  4. BEGIN  
  5.  
  6. SET NOCOUNT ON 
  7.  
  8. CREATE TABLE [dbo].#tableinfo( 
  9.  表名 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
  10.  記錄數(shù) [intNULL
  11.  預(yù)留空間 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
  12.  使用空間 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
  13.  索引占用空間 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
  14.  未用空間 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL 
  15.  
  16.  
  17. insert into #tableinfo(表名, 記錄數(shù), 預(yù)留空間, 使用空間, 索引占用空間, 未用空間) 
  18. exec sp_MSforeachtable "exec sp_spaceused '?'"  
  19.  
  20. select * from #tableinfo 
  21. order by 記錄數(shù) desc  
  22.  
  23. drop table #tableinfo  
  24.  
  25. END 
  26. -- 執(zhí)行方法 
  27. exec sys_viewtablespace 

3、清理數(shù)據(jù)庫日志文件

數(shù)據(jù)庫日志文件一般都會非常大,甚至占用超過幾百G甚至上T,如果不需要進(jìn)行一直保留數(shù)據(jù)庫日志文件,可以建一個數(shù)據(jù)庫作業(yè),定時清理數(shù)據(jù)庫日志文件,具體可以采用下面的腳本。

 

  1. USE master  
  2. ALTER DATABASE DB SET RECOVERY SIMPLE WITH NO_WAIT  
  3. ALTER DATABASE DB SET RECOVERY SIMPLE --調(diào)整為簡單模式  
  4. USE DB  
  5. DBCC SHRINKFILE (N'DB_log' , 2, TRUNCATEONLY) --設(shè)置壓縮后的日志大小為2M,可以自行指定  
  6. USE master  
  7. ALTER DATABASE DB SET RECOVERY FULL WITH NO_WAIT  
  8. ALTER DATABASE DB SET RECOVERY FULL --還原為完全模式 

4、SQLServer查看鎖表和解鎖

工作中遇到查詢的時候一直查詢不出來結(jié)果,可以執(zhí)行該腳本判斷是否鎖表,然后解鎖就可以正常查詢數(shù)據(jù)了。

 

  1. -- 查詢被鎖表 
  2. select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName    
  3. from   sys.dm_tran_locks where resource_type='OBJECT'
  4. --參數(shù)說明 spid   鎖表進(jìn)程 ;tableName   被鎖表名 
  5. -- 解鎖語句 需要拿到spid然后殺掉縮表進(jìn)程 
  6. declare @spid  int  
  7. Set @spid  = 57 --鎖表進(jìn)程 
  8. declare @sql varchar(1000) 
  9. set @sql='kill '+cast(@spid  as varchar
  10. exec(@sql) 

5、SQLServer生成日期維度表

該腳本可以生成一個日期維度的數(shù)據(jù)表,通過該數(shù)據(jù)表可以解決很多報表查詢問題。非常實用。

 

  1. --1、創(chuàng)建數(shù)據(jù)表 T_Date 
  2. CREATE TABLE [dbo].[T_Date]( 
  3. [the_date] [intNOT NULL
  4. [date_name] [nvarchar](30) NULL
  5. [the_year] [intNULL
  6. [year_name] [nvarchar](30) NULL
  7. [the_quarter] [intNULL
  8. [quarter_name] [nvarchar](30) NULL
  9. [the_month] [intNULL
  10. [month_name] [nvarchar](30) NULL
  11. [the_week] [intNULL
  12. [week_name] [nvarchar](30) NULL
  13. [week_day] [intNULL
  14. [week_day_name] [nvarchar](30) NULL
  15. CONSTRAINT [PK_T_Date] PRIMARY KEY CLUSTERED  
  16. [the_date] ASC 
  17. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,  
  18.        IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
  19. ON [PRIMARY
  20. ON [PRIMARY
  21. GO 
  22.  
  23.  
  24. -- 2、創(chuàng)建生成日期的存儲過程 
  25. GO 
  26. /****** Object: StoredProcedure [dbo].[SP_CREATE_TIME_DIMENSION]  ******/ 
  27. SET ANSI_NULLS ON 
  28. GO 
  29. SET QUOTED_IDENTIFIER ON 
  30. GO 
  31.  
  32.  
  33. CREATE PROCEDURE [dbo].[SP_CREATE_TIME_DIMENSION] 
  34. @begin_date nvarchar(50)='2015-01-01' , 
  35. @end_date nvarchar(50)='2030-12-31' 
  36. as 
  37. /* 
  38. SP_CREATE_TIME_DIMENSION: 生成時間維數(shù)據(jù) 
  39. begin_date: 開始時間 
  40. end_date:結(jié)束時間 
  41. */ 
  42. declare  
  43. @dDate date=convert(date,@begin_date), 
  44. @v_the_date varchar(10), 
  45. @v_the_year varchar(4), 
  46. @v_the_quarter varchar(2), 
  47. @v_the_month varchar(10), 
  48. @v_the_month2 varchar(2), 
  49. @v_the_week varchar(2), 
  50. @v_the_day varchar(10), 
  51. @v_the_day2 varchar(2), 
  52. @v_week_day nvarchar(10), 
  53. @adddays int=1; 
  54. WHILE (@dDate<=convert(date,@end_date)) 
  55. begin 
  56. set @v_the_date=convert(char(10),@dDate,112);--key值格式為yyyyMMdd 
  57. set @v_the_year=DATEPART("YYYY",@dDate);--年份 
  58. set @v_the_quarter=DATEPART("QQ",@dDate);--季度 
  59. set @v_the_month=DATEPART("MM",@dDate);--月份(字符型) 
  60. set @v_the_day=DATEPART("dd",@dDate);--日(字符型) 
  61. set @v_the_week=DATEPART("WW",@dDate);--年的第幾周 
  62. set @v_week_day=DATEPART("DW",@dDate); --星期幾 
  63. -- 插入數(shù)據(jù) 
  64. insert into T_Date(the_date,date_name,the_year,year_name,the_quarter, 
  65.  quarter_name,the_month,month_name,the_week,week_name,week_day,week_day_name) 
  66. values
  67. @v_the_date, 
  68. convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_month) 
  69.   +'月'+convert(nvarchar(10),@v_the_day)+'日'
  70. @v_the_year, 
  71. convert(nvarchar(10),@v_the_year)+'年'
  72. @v_the_quarter, 
  73. convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_quarter)+'季度'
  74. case when @v_the_month>=10 then  
  75. convert(int,(convert(nvarchar(10),@v_the_year)+convert(nvarchar(10),@v_the_month))) 
  76. else convert(int,convert(nvarchar(10),@v_the_year)+'0' 
  77.              +convert(nvarchar(10),@v_the_month)) end
  78. convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_month)+'月'
  79. @v_the_week 
  80. ,'第'+convert(nvarchar(10),@v_the_week)+'周'
  81. @v_week_day, 
  82. case @v_week_day-1  
  83. when 1 then '星期一'  
  84. when 2 then '星期二'  
  85. when 3 then '星期三' 
  86. when 4 then '星期四'  
  87. when 5 then '星期五'  
  88. when 6 then '星期六' 
  89. when 0 then '星期日' 
  90. else '' end 
  91. ); 
  92. set @dDate=dateadd(day,@adddays,@dDate); 
  93. continue 
  94. if @dDate=dateadd(day,-1,convert(date,@end_date)) 
  95. break 
  96. end 
  97.  
  98.  
  99. -- 3、執(zhí)行存儲過程生成數(shù)據(jù) 
  100. GO 
  101. DECLARE @return_value int 
  102. EXEC    @return_value = [dbo].[SP_CREATE_TIME_DIMENSION] 
  103. SELECT    'Return Value' = @return_value 
  104. GO 

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2021-01-08 16:27:52

SQL數(shù)據(jù)庫開發(fā)

2010-07-01 11:49:13

SQL Server

2010-07-15 17:28:50

SQL Server

2010-07-08 11:05:14

SQL Server數(shù)

2020-08-21 10:25:02

PythonWget

2020-09-14 11:10:43

Python代碼

2011-03-18 13:23:47

SQL ServerOracle

2018-12-12 19:10:01

Oracle數(shù)據(jù)庫自動備份

2011-03-24 09:45:34

SQL Server數(shù)恢復(fù)

2011-03-24 09:07:11

SQL Server數(shù)備份

2011-03-24 09:24:08

SQL Server數(shù)還原

2021-05-17 06:57:34

SQLServer數(shù)據(jù)庫

2010-09-14 09:53:52

sql server還

2010-07-12 09:10:05

SQL Server數(shù)

2021-03-28 10:16:18

SQL Server數(shù)據(jù)庫PowerDesign

2010-10-22 15:42:59

SQL Server創(chuàng)

2011-04-07 14:50:21

SQL Server數(shù)據(jù)庫

2024-03-13 07:26:23

2023-09-13 06:59:07

2011-04-01 17:05:44

SQL Server數(shù)日志
點贊
收藏

51CTO技術(shù)棧公眾號