日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sql Server常用函数及技巧

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sql Server常用函数及技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用Sql Server好長時間了,今天特別想總結(jié)一下,算是回顧吧!

總結(jié): 其實很多技巧,都是基于SQL Server自帶的System?ViewsSystem?Stored ProceduresSystem Functions (常用函數(shù)都在在里面)。

常用函數(shù):

1. ISNULL(columnName, '')

  先判斷該字段是否為空,如果為空,返回''; 否則返回該字段本來的值。

2.?DATEDIFF(datepart,startdate,enddate)

  不羅嗦,直接參考?鏈接

3. CONVERT函數(shù)

  直接參考鏈接

4. LEN? 計算長度

5. OBJECT_NAME('object_id')? 通過object id得到object name

6. OBJECT_ID('object_name')? ?通過object name得到 object id

7. CAST 函數(shù)?

實用語句:

1. 有時候項目中定義的儲存過程比較多,需要確定某一個表被哪些stored procedure使用了,可以有如下兩種方法:

  a. SSMS界面上,選中要查的表,右鍵,點擊查找依賴,就會顯示出來

  b. 使用語句:? ?

exec sys.sp_depends <tableName>

? ? 例如: exec sys.sp_depends 'TB_Student'

?

2. 查找 死鎖

  用到系統(tǒng)表: sys.sysprocesses (其實是一個系統(tǒng)View)?

視圖中主要的字段:
1. Spid:Sql Servr 會話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會話 ID。如果此列為 Null,則標(biāo)識請求未被阻塞
4. Waittype:當(dāng)前連接的等待資源編號,標(biāo)示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當(dāng)前等待時間,單位為毫秒,0 表示沒有等待
6. DBID:當(dāng)前正由進(jìn)程使用的數(shù)據(jù)庫ID
7. UID:執(zhí)行命令的用戶ID
8. Login_time:客戶端進(jìn)程登錄到服務(wù)器的時間。
9. Last_batch:上次執(zhí)行存儲過程或Execute語句的時間。對于系統(tǒng)進(jìn)程,將存儲Sql Server 的啟動時間
10.Open_tran:進(jìn)程的打開事務(wù)個數(shù)。如果有嵌套事務(wù),就會大于1
11.Status:進(jìn)程ID 狀態(tài),dormant = 正在重置回話 ; running = 回話正在運行一個或多個批處理 ; background = 回話正在運行一個后臺任務(wù) ; rollback = 會話正在處理事務(wù)回滾 ; pending = 回話正在等待工作現(xiàn)成變?yōu)榭捎?; runnable = 會話中的任務(wù)在等待獲取 Scheduler 來運行的可執(zhí)行隊列中 ; spinloop = 會話中的任務(wù)正在等待自旋鎖變?yōu)榭捎?; suspended = 會話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱
13.Program_name:應(yīng)用程序的名稱,就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應(yīng)用程序在客戶端工作站里的進(jìn)程ID號
15.Cmd:當(dāng)前正在執(zhí)行的命令
16.Loginame:登錄名?

  例子:

  a. 檢查數(shù)據(jù)庫是否發(fā)生阻塞

  先查找哪個鏈接的 blocked 字段不為0。如 SPID10的blocked 字段不為0,而是11。SPID 11 的 blocked 為0,就可以得出結(jié)論:此時有阻塞發(fā)生,10 被 11 阻塞住了。如果你發(fā)現(xiàn)一個連接的 blocked 字段的值等于它自己,那說明這個連接正在做磁盤讀寫,它要等自己的 I/O 做完。

  b. 查找鏈接在那個數(shù)據(jù)庫上

  檢查 dbid 即可。得到 dbid,可以運行以下查詢得到數(shù)據(jù)庫的名字:

Select name,dbid from master.sys.sysdatabases

  

3. 查看View或者Stored Procedure的定義語句,有時候通過SSMS界面比較慢,用語句較快

Select definition, * from sys.sql_modules

  使用系統(tǒng)表(嚴(yán)格意義上,是個View):sys.sql_modules?

?

4. 在Stored Procedure中查找關(guān)鍵字

  之前用下面的語句,但是發(fā)現(xiàn)這條語句有問題,因為這里的ROUTINE_DEFINITION,只取到procedure內(nèi)容的前4000個字符,導(dǎo)致查的結(jié)果不正確。

SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%keyWord%' AND ROUTINE_TYPE = 'PROCEDURE'

  用下面的語句,就可以查到:

SELECT OBJECT_NAME(object_id), OBJECT_DEFINITION(object_id) FROM SYS.PROCEDURES WHERE OBJECT_DEFINITION(object_id) LIKE '%keyWord%'

  看完上面的第3條,其實使用sys.sql_modules 也是可以用來查找關(guān)鍵字。

5.? 在數(shù)據(jù)庫中,我們會經(jīng)??吹?#xff0c;一些表中,只有一個id做為主鍵,那我們怎么快速確認(rèn)它是否是自增的呢?

  使用下面的語句查詢,objectId和columnName根據(jù)實際情況填寫。如果id_identity的值為1,它就是自增的,否則,就不是自增的。

select id_identity, * from sys.columns where object_id = 'objectId' and name = 'columnName'

  一般在建表語句中,定義自增使用的是? identity(1, 1) , 表示自增,從1開始,遞增量為1。

CREATE TABLE T_test (ID int IDENTITY(1,1), Name varchar(50) )

  判段一個表是否具有標(biāo)識列
  可以使用 OBJECTPROPERTY 函數(shù)確定一個表是否具有 IDENTITY(標(biāo)識)列,用法:

Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')

  如果有,則返回1,否則返回0

  判斷某列是否是標(biāo)識列
  可使用 COLUMNPROPERTY 函數(shù)確定 某列是否具有IDENTITY 屬性,用法

SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity')

  如果該列為標(biāo)識列,則返回1,否則返回0

  查詢某表標(biāo)識列的列名
  SQL Server中沒有現(xiàn)成的函數(shù)實現(xiàn)此功能,實現(xiàn)的SQL語句如下

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='表名' AND COLUMNPROPERTY( OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1

  

轉(zhuǎn)載于:https://www.cnblogs.com/FocusIN/p/7341380.html

總結(jié)

以上是生活随笔為你收集整理的Sql Server常用函数及技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。