zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ADB命令大全
    Backup your Android without root or custom recovery -- adb backup
    Content portal for Pocketables Tasker articles
    Is there a way to detect if call is in progress? Phone Event
    Tasker to proximity screen off
    Tasker to detect application running in background
    Tasker to create toggle widget for ES ftp service -- Send Intent
    Tasker to proximity screen on
    Tasker to answer incoming call by pressing power button
    Tasker to stop Poweramp control for the headset while there is an incoming SMS
  • 原文地址:https://www.cnblogs.com/yuerdongni/p/2650676.html
Copyright © 2011-2022 走看看