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

  • 相关阅读:
    go基础系列:结构struct
    梯度下降法解决线性回归
    梯度下降法解决线性回归
    梯度下降法解决线性回归
    【 Linux 】单台服务器上并发TCP连接数(转)
    【 Linux 】单台服务器上并发TCP连接数(转)
    【 Linux 】单台服务器上并发TCP连接数(转)
    axios在vue项目中的一种封装方法
    快速排序算法(C#实现)
    你必须知道的261个Java语言问题
  • 原文地址:https://www.cnblogs.com/yuerdongni/p/2650676.html
Copyright © 2011-2022 走看看