• 用sql写个作业每隔五分钟去读某个文件夹下所有xml文件,并导入到DB中


    消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
    SQL Server 阻止了对组件 'xp_cmdshell' 的 过程 'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

    exec sp_configure 'show advanced options', 1;
    reconfigure;
    exec sp_configure 'xp_cmdshell', 1; reconfigure;

    用sql写个作业每隔五分钟去读某个文件夹下所有xml文件,并把它的数据插入到一张表在把它删除

    --create table TEST (
    --
    A char(10),B char(10),C char(10)
    --
    )

    DECLARE
    @XMLDIR varchar(2000), --XML放置的文件全路径
    @DIR varchar(1000), --XML的文件夹
    @FileFullName varchar(8000) --游标用,文件名称(全路径)
    declare
    @FileTable TABLE(x varchar(8000)) --临时表,存储 文件夹所有XML文件名称

    SET @DIR='D:\TEST'
    SET @XMLDIR=N'DIR '+ @DIR + '\*.xml' --*.xml 只读取是XML的扩展名文件

    INSERT @FileTable
    exec xp_cmdshell @XMLDIR --将文件夹的内容读取插入临时表中
    delete from @FileTable where x not like '%.xml%' or x is null
    update @FileTable set x=@DIR+'\'+SUBSTRING(x,37,120)
    --select * from @FileTable


    declare fCursor cursor for
    select x from @FileTable
    open fCursor
    fetch next from fCursor into @FileFullName
    while(@@fetch_status=0)
    BEGIN
    declare
    @xml varchar(8000), --XML转换成列的内容
    @Pointer INT, --指向位置的变量
    @DELFILENAME varchar(2000) --删除文件的CMDSHELL
    declare @table TABLE(x varchar(8000))
    SET @DELFILENAME= 'DEL '+@FileFullName
    insert into @table EXEC ('(SELECT * FROM OPENROWSET(BULK '''+@FileFullName+''',SINGLE_CLOB) as x)')
    select @xml=x from @table
    EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@xml
    INSERT INTO TEST(A,B,C)
    SELECT A,B,C
    FROM OPENXML (@Pointer,'ROOT/Row')WITH(A varchar(10),B varchar(10),C varchar(10))
    EXEC sp_xml_removedocument @Pointer

    EXEC xp_cmdshell @DELFILENAME
    fetch next from fCursor into @FileFullName
    END
    close fCursor --关闭游标
    deallocate fCursor --删除游标

    剩下的就是加个代理了..哈...5分钟执行一次

    XML文件如下

    <ROOT>
    	<Row A='1' B='1' C='1'></Row>
    	<Row A='2' B='1' C='1'></Row>
    	<Row A='3' B='1' C='1'></Row>
    	<Row A='4' B='1' C='1'></Row>
    </ROOT>
    
    千人.NET交流群:18362376,因为有你,代码变得更简单,加群请输入cnblogs
  • 相关阅读:
    图像通道的分离与合并
    frame表单嵌套的定位
    windows10(家庭版)+ laradock 安装踩坑记一记
    Laradock + tp5 + nginx 配置虚拟机域名始终跳转首页/502报错
    php私有组件以及创建自己的composer私有组件(packagist+git+composer)
    申请一个美国paypal账户
    php执行shell脚本
    Linux修复日志
    php7 安装redis拓展
    vim编辑器-删除命令
  • 原文地址:https://www.cnblogs.com/kingkoo/p/2024501.html
Copyright © 2020-2023  润新知