sql server 里面提供了豐富的系統存儲過程來輔助我們管理數據庫以及開發。今天分享介紹一些常用的數據庫擴展存儲過程
xp_cmdshell
這個大家都比較熟悉了,使用xp_cmdshell 可以在連接sql server 的時候可以執行doc 命令
最簡單一個例子EXEC master.sys.xp_cmdshell 'dir D:\' 獲取D 盤下面的目錄。當然這個D:\ 是服務器上面的,不是本地電腦的。
所以有時候可以使用 xp_cmdshell 配合作業都角度使用執行bcp等命令來導入導出數據,也是很方便的。
但是使用的過程中,有下面幾點留意一下
1 首次使用的時候,需要使用 EXEC sys.sp_configure @configname = 'xp_cmdshell',@configvalue = 1 來啟用xp_cmdshell ,默認情況下,sql server 是禁用本功能的
2 可以使用 no_output 來忽略輸出結果。
3 注意權限問題,注意非管理員賬號的用戶使用xp_cmdshell 。
xp_logininfo
這個返回的是服務器windows 用戶和windows 組的信息
msdn上面寫着這個存儲過程具有3個參數 @acctname ,@option ,@privilege
燃鵝不知道是我測試的問題還是本身這個存儲過程只有1個參數,@option 和 @privilege 傳入進去都是無效的。
使用方法
EXEC master.sys.xp_logininfo
或者 EXEC master.sys.xp_logininfo @acctname = 'GINLATOP\Gin' 加上個賬號名還是ok的
xp_msver
這個是返回服務器的版本消息。
調用方法可以使用
EXEC master..xp_msver
或者 EXEC master..xp_msver 'ProductName' --這個可以是上面的結果集返回的任意一個Name 的值,假如找不到,就會返回空結果集
xp_sprintf
這個擴展存儲過程看起來就有點像入門寫C語言的printf 函數了。燃鵝即時這樣,我認為其實用到它的機會並不多。大部分使用的場景如下
DECLARE @i VARCHAR(20) = 1,
@j varchar(50) = 'ajofen',
@s VARCHAR(80)
EXEC master..xp_sprintf @s OUTPUT,'there are two varaint one is %s and another is %s ',@i,@j
PRINT @s
坑爹的是,這個存儲過程的參數只支持字符型的……並且如果這樣搞的話,使用 +來拼接字符串也ok了,所以也只是介紹一下╮(╯_╰)╭
xp_sscanf
這個擴展存儲過程是對插入的字符串變量進行格式化取值。
DECLARE @i VARHAR(50) = 1,
@j varchar(50) ,
@s VARCHAR(80)
EXEC master..xp_sscanf '3 + 31 = 34','%s + %s =34',@i OUTPUT,@s OUTPUT
SELECT @i,@j,@s
好,本次分享在這里結束了。下次看看再找一下。或者大家補充一下