xp_cmdshell 用法


http://blog.csdn.net/fwacky/article/details/5538147

一、簡介
        xp_cmdshell 擴展存儲過程將命令字符串作為操作系統命令 shell 執行,並以文本行的形式返回所有輸出。
 

三、SQL Server 2005中的xp_cmdshell
        由於存在安全隱患,所以在SQL Server 2005中, xp_cmdshell 默認是關閉的。
        此時,如果執行 xp_cmdshell 將會提示服務未開啟:
 
        exec xp_cmdshell 'dir c:/'

消息 15281,級別 16,狀態 1,過程 xp_cmdshell,第 1 行
SQL Server 阻止了對組件 'xp_cmdshell' 的 過程'sys.xp_cmdshell' 的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'xp_cmdshell'。有關啟用 'xp_cmdshell' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。


四、開啟xp_cmdshell

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
  
  關閉一樣.只是將上面的后面的那個"1"改成"0"就可以了.
  
  EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;

未能找到存儲過程 'master..xp_cmdshell'
第一步執行:EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int
第二步執行:sp_addextendedproc 'xp_cmdshell','xpsql70.dll'

五 小應用

exec xp_cmdshell 'dir c:/'

output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 驅動器 C 中的卷沒有標簽。
 卷的序列號是 4B44-2248
NULL
 c:/ 的目錄
NULL
2009/03/17  16:25             1,024 .rnd
2009/06/22  20:24    <DIR>          2ca0cee524d21bddd225196413
2009/07/22  15:39    <DIR>          a
2008/09/01  03:12                74 autoexec.bat
2006/09/19  05:43                10 config.sys
2008/01/21  10:43    <DIR>          PerfLogs
2009/07/31  23:28     1,073,741,824 ppsds.pgf
2009/07/29  08:57    <DIR>          Program Files
2009/05/27  21:54                20 SSOLib.ini
2009/04/17  11:10    <DIR>          SwSetup
2009/08/13  16:48    <DIR>          TDDownload
2009/06/18  22:48    <DIR>          Temp
2008/10/11  08:24    <DIR>          UiTV
2008/10/04  04:58    <DIR>          Users
2009/07/30  19:58    <DIR>          Windows
               5 個文件  1,073,742,952 字節
              10 個目錄 34,368,856,064 可用字節
NULL

(23 行受影響)

應用2 輸出f盤下某文件夾的所有JPG格式的文件

DECLARE @result int
EXEC @result = xp_cmdshell 'dir F:/雜七雜八/photo/*.jpg'
IF (@result = 0)
   PRINT 'Success'
ELSE
   PRINT 'Failure'

F:/雜七雜八/photo 的目錄
NULL
2009/05/28  19:43            88,931 (~ o ~)Y.jpg
2008/10/06  12:56            85,044 66666.jpg
2008/10/06  12:56           466,826 DSC00040.JPG
2008/10/28  21:35           355,820 http_imgloadCA3DGXKF.jpg
2009/05/07  19:04            83,433 http_imgloadCAG3I0EJ.jpg
2009/05/07  19:04           106,528 http_imgloadCATYBM7V.jpg
2009/02/19  19:18            72,074 ME.jpg
2009/05/28  19:42            76,863 p_large_xoDu_2617d206096.jpg
2008/10/06  12:57            54,716 圖像001.jpg
2008/10/06  12:57            25,668 圖像005.jpg
2008/10/06  12:57            17,675 圖像018.jpg
2008/12/21  17:30            14,769 圖像022.jpg
2008/10/06  12:57            14,707 圖像025.jpg
2008/10/08  17:34           471,752 新圖像.JPG
2008/10/06  12:57           111,465 照片 044.jpg
2008/10/06  12:57            34,878 集體照.jpg
              16 個文件      2,081,149 字節
               0 個目錄  8,026,488,832 可用字節
NULL

(24 行受影響)

Success


應用三:

將變量內容寫入文件中

 DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > F:/xiaozhu.txt'
EXEC master..xp_cmdshell @cmd

應用四:

將文件內容放到表里

insert into #t
EXEC master.dbo.xp_cmdshell 'dir  F:/雜七雜八/photo/*.jpg/b'

這個還是舉個例子吧

/*

數據庫DBA中有表Table
結構如下:
-------------
id(自增)
path
---------------


path的內容類似這樣記錄
------------------------------------

200410172013291.jpg                             
2004101516293326425686.jpg                       
200412312558clip_image002.jpg                   
200410141821208.jpg                             
2004101213222695B6C65F4468C5E0D70242E7C066F154.jpg
20041011163730IMG_0243.JPG                       
2005720145516fyzw_20057138345.jpg               
200578221362005620164840.jpg                     
20057822520玉照.JPG                       
20057151752442222.jpg                                                                           
200578203732英x.jpg                           
200578164326圖片 008.jpg                         
200581832240.jpg                                 
2005781626123.jpg                               
20057815392112.jpg                               
20057815324211111 拷貝.jpg                       
2004101212359vb2.JPG                             
2004108134415IMAGE_00482.jpg                     
2004925232010照片:).jpg                   
2004106143316t.jpg                               
20049231033373.jpg                               
2004922133386.JPG                               
2004914124416showphoto.jpg                       
2004911223336photo28.jpg                         
2004927945224.jpg                               
2005112819271273499.jpg
2004830144020ldmsapp1.jpg                                                                         
2005715113135照片 074_調整大小.jpg
……
---------------------------------             

有一圖片文件夾,里面圖片名稱就是path的值
(說明:圖片文件夾中存在的圖片,一定可以在數據庫中找到記錄)

有什么好方法?如何可以快速地將無圖片的path值填為null呢???


圖片大約有1000個左右
path中的的記錄大約為5萬條*/

if object_id('tb') is not null
  drop table tb
go
create table tb(id int,path varchar(200))
insert into tb
select 1,' F:/雜七雜八/photo/66666.jpg'
union all
select 2,' F:/雜七雜八/photo/DSCF3831.JPG'

select * from tb

drop table #t
CREATE TABLE #t(filename NVARCHAR(1024));

insert into #t
EXEC master.dbo.xp_cmdshell 'dir  F:/雜七雜八/photo/*.jpg/b'

update tb
set path=null
from tb left join #t t
on tb.path like '%'+t.filename+'%'
where filename is null

select * from tb

/*

id          path
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1            F:/雜七雜八/photo/66666.jpg
2           NULL

*/

這里 一個被更新為NULL 因為文件夾里不存在這個照片。。

創建一個文件夾 並且在里面加個MDF

use master
go
if exists (select * from sysdatabases where name='bbsDB')
drop database bbsDB
go
exec xp_cmdshell 'mkdir d:/project'
create database bbsDB
on
(
name='bbsDB_data',
filename='d:/project/bbsDB_data.mdf',
size=10,
filegrowth=20%
)
log on
(
name='bbsDB_log',
filename='d:/project/bbsDB_log.ldf',
size=3,
maxsize=20,
filegrowth=10%
)
go


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM