SQL Server 資料庫部分常用語句小結(二)

東山絮柳仔發表於2018-11-10

9. 查詢備份還原資料庫的進度。

select command
,percent_complete
,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+` hour, `
+convert(varchar,(estimated_completion_time)/60000)+` min, `
+convert(varchar,(estimated_completion_time)/1000)+` sec`
,start_time=convert(char(16),start_time,120)
,est_completion_time=convert(char(16),dateadd(second,estimated_completion_time/1000,getdate()),120)
,running_time=convert(varchar,((datediff(s,start_time,getdate()))/3600))+` hour, `
+convert(varchar,(datediff(s,start_time,getdate()))/60)+` min, `
+convert(varchar,(datediff(s,start_time,getdate())))+` sec`
,s.text
from sys.dm_exec_requests r
cross apply sys.dm_exec_sql_text(r.sql_handle) s
where r.command in (`BACKUP DATABASE`,`RESTORE DATABASE`,`BACKUP LOG`,`RESTORE LOG`,`DbccFilesCompact`,`DbccSpaceReclaim`)

10. 刪除指定表內的某個統計資訊(例如,有時候,我們在AlwaysOn可用性組的副庫上執行某個查詢,會提示某個統計資訊缺失)。

報錯資訊 

訊息 2767,級別 16,狀態 1,過程 sp_table_statistics2_rowset,第 105 行
無法在系統目錄中找到統計資訊 `XXXXXX`。

語法

DROP STATISTICS table.statistics_name | view.statistics_name [ ,…n ]

這個命令在副庫上執行,如果提示 無法對 統計資訊 `‘XXXXXXX’` 執行 刪除,因為它不存在,或者您沒有所需的許可權。

此時 可轉到主庫上嘗試執行。

11. SQL Server 2012 關於序列 的基本操作【在對應DB下執行】。

SELECT * FROM sys.sequences

— 獲取下一個值
SELECT NEXT VALUE FOR [dbo].[自定義的序列名稱];

— 重置為1
ALTER SEQUENCE [dbo].[自定義的序列名稱] RESTART WITH 1 ;

12. 自增列(IDENTITY(1,1))的資料匯入。

2個表都有自增列(IDENTITY(1,1)),怎麼才能匯入資料呢?
例如,我想將含有IDENTITY(1,1)列的大表QQ_CampTask_T1,Rename成一張舊錶QQ_CampTask,接下來還要把其中部分資料匯入到新建的QQ_CampTask_T1 中,新產生的表還是有IDENTITY(1,1),此時匯入資料,這個列就會報錯。
訊息 8101,級別 16,狀態 1,第 1 行
僅當使用了列列表並且 IDENTITY_INSERT 為 ON 時,才能為表QQ_CampTask_T1`中的標識列指定顯式值。

解決方案
SET IDENTITY_INSERT QQ_CampTask_T1【表名】 on
此效用就在同一個回話中有效,其它不行。另外 還需要特別注意的是:一定要寫明 列名。

例如:

SET IDENTITY_INSERT QQ_CampTask_T1 on
insert into QQ_CampTask_T1 ([ID],[CreateTime])
select [ID],[CreateTime] from QQ_CampTask

13. 修Table的改列名。

EXEC sp_rename `表名.[原列名]`, `新列名`, `column`

14. 賦予指定賬戶檢視執行計劃的許可權。

GRANT SHOWPLAN TO [XXX_test] —賬號是XXX_test;在指定資料庫下執行

15. SQL語句執行耗費資源統計分析。

set statistics profile on
set statistics io on
set statistics time on
go
–寫SQL語句的地方

————

go
set statistics profile off
set statistics io off
set statistics time off

16. 增加約束:如果表的某一列沒有約束,而要在此列增加約束。

類似命令 如下:
ALTER TABLE [dbo].[表明] ADD DEFAULT ((預設值)) FOR [列名]

17. sqlserver 伺服器更改主機名後,需要做一些操作,不然維護計劃 以及訂閱釋出都會有問題。有時修改計算機名後,執行select @@servername仍返回原來的計算機名,表示”例項”並沒有隨著修改。

USE master;
GO
IF SERVERPROPERTY(`servername`)<>@@SERVERNAME
BEGIN
DECLARE @server sysname;
SET @server=@@SERVERNAME;
EXEC sp_dropserver @server=@server;
SET @server=CAST(SERVERPROPERTY(`servername`)AS sysname );
EXEC sp_addserver @server=@server,@local=`LOCAL`;
END
GO

(我們重啟一下服務.OK)

18. 出現效能瓶頸時,執行以下程式碼,檢查瓶頸程式碼。

sp_lock
DBCC INPUTBUFFER(XXX) —XXX 出現多次的spid

19查詢表的大小

sp_spaceused `Rel_OrderItem`

20. 字元與ASCII碼相互轉化,有的時候要對資料清理,所以有必要了解一下。

例如 Char(“9”) tab(水平製表符)
Char(“10”) 換行
Char(“11”) tab(垂直製表符)
Char(“12”) 換頁
Char(“13”) 回車 chr(13)&chr(10) 回車和換行的組合
Char(“32”) 空格 SPACE

(1)獲取字元的ASCII碼 ASCII
ASCII碼是對字元的標準編碼。要獲取字元的ASCII碼可以通過ASCII函式來實現。
語法:ASCII(espression)–這裡的expression是一個返回char或varchar資料型別的表示式,ASCII函式僅對錶達式最左側的字元返回ASCII碼值。
例如:select ASCII(`f`) –輸出 102
(2)獲取ASCII碼對應的字元 Char
語法:char(integer_expression)
例如:select char(102) — 輸出f

 

相關文章